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毫秒