Programming 版 (精华区)
发信人: lansh (沧海一粟), 信区: Programming
标 题: Allegro 游戏程序库 (真彩点格式)
发信站: 哈工大紫丁香 (2002年09月11日20:06:32 星期三), 站内信件
发信人: cloudwu (云风), 信区: GAME_Designer
标 题: Allegro 游戏程序库 (真彩点格式)
发信站: BBS 水木清华站 (Wed May 20 10:49:21 1998)
______ ___ ___
/\ _ \ /\_ \ /\_ \
\ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___
\ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\
\ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \
\ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
\/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
/\____/
\_/__/ 3.0 版
一个游戏程序库
By Shawn Hargreaves, 1994/97
云风 译
http://www.nease.net/~cloudwu
E-mail:cloudwu@nease.net
=================================================
================ 真彩点格式 =================
=================================================
在真彩显示模式下,红绿蓝组成了每个点并且直接连在一起成为色彩值,
而不是使用一个调色板查找表.在 15 位模式每种颜色占 5 位, 在 16
位模式每个点红色和蓝色占 5 位绿色占 6 位, 24 和 32 位模式每种
颜色占 8 位 ( 32 位点简单的增加一个额外的填充字节来调整数据).
这些成分的布局会因你的硬件而改变, 但是通常是 RGB 或 BGR 之一.
因为一个显示模式在使用之前并不知道布局,你必须在使用下面的例程
之前调用 set_gfx_mode()!
int makecol8(int r, int g, int b);
int makecol15(int r, int g, int b);
int makecol16(int r, int g, int b);
int makecol24(int r, int g, int b);
int makecol32(int r, int g, int b);
这些函数将颜色从独立于硬件的形式 (红绿蓝,范围 0-255) 转换到
依赖于点格式显示值.转换到 15, 16, 24 或 32 位格式只需要做几
个移位, 因此相当的有效. 转换到 8 位颜色则需要搜索调色板以寻
找最佳匹配, 如果你不设置一个 RGB 映射表(见后) 这相当的慢.
int makecol(int r, int g, int b);
将颜色从独立于硬件的格式 (红绿蓝,范围 0-255) 转换到当前显示
模式决定的点格式,它调用前面 8, 15, 16, 24, 或 32 位 makecol
函数中合适的一个.
int makecol_depth(int color_depth, int r, int g, int b);
将颜色从于硬件独立的格式 (红绿蓝, 范围 0-255)转换到指定颜色
深度的点格式.
int getr8(int c);
int getg8(int c);
int getb8(int c);
int getr15(int c);
int getg15(int c);
int getb15(int c);
int getr16(int c);
int getg16(int c);
int getb16(int c);
int getr24(int c);
int getg24(int c);
int getb24(int c);
int getr32(int c);
int getg32(int c);
int getb32(int c);
给出在显示模式的点格式下的一个颜色, 这些函数将截取红绿蓝组
合中的一个 (范围 0-255).
int getr(int c);
int getg(int c);
int getb(int c);
给出现在正在使用的显示模式下使用的点格式的一个颜色, 这些函数
将截取红绿蓝组合中的一个(范围0-255), 它调用前面的 8, 15, 16,
24 或 32 位 get 函数中合适的一个.
int getr_depth(int color_depth, int c);
int getg_depth(int color_depth, int c);
int getb_depth(int color_depth, int c);
给出指定颜色深度的点格式中的一个颜色, 这些函数将截取红绿蓝组
合中的一个 (范围 0-255).
extern int palette_color[256];
由当前的显示模式使用的映射调色板序列 (0-255) 到其它任何点格
式的一张表.在 256 色模式下,它恰好映射序列数组. 在真彩模式下,
它在当前的调色板里查找指定的颜色号, 然后将 RGB 值转换到合适
的点格式.
#define MASK_COLOR_8 0
#define MASK_COLOR_15 (5.5.5 点)
#define MASK_COLOR_16 (5.6.5 点)
#define MASK_COLOR_24 (8.8.8 点)
#define MASK_COLOR_32 (8.8.8 点)
定义每个颜色深度下的透明精灵的掩点. 在 256 色的分辨率下为 0,
在真彩模式下是亮点 (bright pink).
--
http://www.nease.net/~cloudwu
http://computer.igd.edu.cn/~cloud
E-mail: cloudwu@163.net
--
人生得意需尽欢,莫使金樽空对月。
天生我才必有用,千金散尽还复来。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: hitsat.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.179毫秒