reactos操作系统实现(195)

系统调色板相关功能的代码在文件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 是指明调色板里的值是动态改变的,这是为了调色板动画准备的。

你可能感兴趣的:(reactos操作系统实现(195))