Windows图标-Icon文件格式分析。[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

C原型定义:
typdef struct
{
bitmapinfoheader   icheader;      // dib header
rgbquad         iccolors[1];   // color table
byte            icxor[1];      // dib bits for xor mask
byte            icand[1];      // dib bits for and mask
} iconimage, *lpiconimage;

VB定义:
Public Type iconimage '{
    icheader As bmih ';DIB位图信息头:bitmapinfoheader // dib header,注:bmih 是我简化了bitmapinfoheader的名称。
                     ' used: bisize, biwidth, biheight(xorH+andH)即2倍高度, biplanes, bibitcount, bisizeimage.
                     'all other members must be 0.
    iccolors() As rgbq  '[1]';色彩表:rgbquad   // color table
    icxor() As Byte  '[1];byte  // dib bits for xor mask:DIB结构的图像数据。XOR掩码?
                     '本文讨论的格式以16色的ICON文件为主,每字节表示两个象素4bpp。
                     '对于256色的文件,icxor数组每字节表示一个象素即:8bpp。
    icand() As Byte  '[1];byte  // dib bits for and mask:DIB结构的图像数据。AND掩码?1bpp
End Type '} iconimage

其中的icheader采用的是DIB结构的BMP文件(常用)的位图信息头的定义类型(参见BMP文件结构分析),但是其中使用的关键变量只用到:bisize, biwidth, biheight, biplanes, bibitcount, bisizeimage.几个,其他变量必须为0。其中的biheight变量和BMP文件里稍有不同,在BMP文件里,该变量指的是文件的高度象素量,而在ICON文件里,可能由于采用了两段掩码图像数据的缘故,该变量的值一般设定为高度象素量的2倍。
色彩表iccolors的尺寸由文件使用的色彩数量决定,对于16色的图像数据为:iccolors(0 to 15),对于256色的图像数据为:iccolors(0 to 255)。但这个数量不是绝对的,

最后定义的时候还是应该由icheader中的bisize, biwidth, biheight, bibitcount变量和索引目录中的dwbytesinres计算得出=(dwbytesinres - biSize - AndMaskall - (biHeight / 2) * Lb)/4  '其中AndMaskall为1bpp那段掩码的尺寸,Lb为每行象素所占的字节数。
icxor数据尺寸为Lb乘以图标高度(biHeight / 2)。icand尺寸为1bpp的掩码数据段每行所占字节数乘以图标高度(biHeight / 2)。
每行象素所占字节数=((icheader.biWidth * icheader.biBitCount + 31) And &HFFFFFFE0) \ 8,是4的倍数,象素位数不够4倍数的用&H00补齐。

掩码的用途:
'    AND位掩码   XOR位掩码       显示'
'    -------------------------------------------'
'    0                            0                  黑色'
'    0                            0-F              调色板指定色'
'    1                            0                  屏幕,透明'
'    1                            1                   屏幕的反色,一般不用。


2.1 DIB位图信息头:bitmapinfoheader:icheader As bmih

C原型定义:
typedef struct tagBITMAPINFOHEADER { /* bmih */
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;

本文关键:Windows图标-Icon文件格式分析。
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top