现在的位置: 首页 > 综合 > 正文

reactos操作系统实现(195)

2013年10月11日 ⁄ 综合 ⁄ 共 910字 ⁄ 字号 评论关闭

系统调色板相关功能的代码在文件subsys/win32k/eng/palette.c里。什么是调色板呢?其实调色板就是当一种图像不是使用到所有颜色时,使用的一种索引技术,以便减少图像保存的大小。一幅图像,如果要按真彩色表达,那么就是256×256×256颜色;如果按256色表示,那就只使用到256个颜色,比起真彩色来说是少了很多空间。把一幅图像里所有包括的颜色生成一张表格,这张表格就叫做调色板。图像保存的数据时并不保存颜色的真实值,而是保存调色板里的索引值。

#001  typedef struct tagLOGPALETTE {

#002       WORD
palVersion;

#003       WORD
palNumEntries;

#004       PALETTEENTRY
palPalEntry[1];

#005  }
LOGPALETTE,*NPLOGPALETTE,*PLOGPALETTE,*LPLOGPALETTE;

这个结构,就是ROS的逻辑调色板结构定义。

palVersion是调色板的版本号。

palNumEntries是调色板内有多少种颜色。

palPalEntry是调色板的入口指针。PALETTEENTRY的结构如下:

#001  typedef struct tagPALETTEENTRY {

#002       BYTE
peRed;

#003       BYTE
peGreen;

#004       BYTE
peBlue;

#005       BYTE
peFlags;

#006  }
PALETTEENTRY,*LPPALETTEENTRY,*PPALETTEENTRY;

上面是每一项调色板保存的值。

peRed是这一索引值里的颜色红色值。

peGreen是这一索引值里的颜色绿色值。

peBlue是这一索引值里的颜色蓝色值。

peFlags是指明这一项颜色值怎么样使用。标志PC_EXPLICIT是指明使用peRed来表示另外一个调色板的索引值,不是真实的颜色值。标志PC_NOCOLLAPSE是指明使用这个调色板里的颜色值来替代已经存在的系统调色板的颜色值。标志PC_RESERVED是指明调色板里的值是动态改变的,这是为了调色板动画准备的。

抱歉!评论已关闭.