'-------------完整的文件構(gòu)成 +---目錄段 +------目錄頭 idreserved As Integer '; word // reserved (must be 0):保留字必須是0 idtype As Integer '; word // resource type (1 for icons):資源類型,,1是圖標(biāo),,2就是光標(biāo)了? idcount As Integer '; word // how many images?:有幾個圖像 +-------------目錄索引1 identries(0) As icondirentry +-------------目錄索引2 identries(1) As icondirentry +-------------目錄索引x最大為32767 identries(X) As icondirentry +---圖像數(shù)據(jù)段 +--------------圖像1 icheader As bmih iccolors(0 to 15) As rgbq '16色 icxor(0 to 511) As Byte '32*32 icand(0 to 127) As Byte '32*32 +--------------圖像2 . +--------------圖像x最大為32768 . '--------------END file.
ICON文件結(jié)構(gòu)
|
目錄頭 6字節(jié)
|
|
ICONDIRENTYR(0) 16字節(jié)
|
索引段
|
ICONDIRENTYR(1) 16字節(jié)
|
ICONDIRENTYR(2) 16字節(jié)
|
………
|
ICONIMAGE
|
圖像數(shù)據(jù)段
|
ICONIMAGE
|
………
|
1.1目錄索引結(jié)構(gòu)(ICONDIRENTRY結(jié)構(gòu))
typedef struct { byte bwidth; // width, in pixels, of the image byte bheight; // height, in pixels, of the image byte bcolorcount; // number of colors in image (0 if >=8bpp) byte breserved; // reserved ( must be 0) word wplanes; // color planes word wbitcount; // bits per pixel dword dwbytesinres; // how many bytes in this resource? dword dwimageoffset; // where in the file is this image? } icondirentry, *lpicondirentry
bwidth:圖像寬度,以象素為單位,。一個字節(jié) bheight:圖像高度,,以象素為單位。一個字節(jié) bcolorcount:圖像中的顏色數(shù)(如果是>=8bpp的位圖則為0) breserved:保留字必須是0 wplanes:為目標(biāo)設(shè)備說明位面數(shù),,其值將總是被設(shè)為1 wbitcount:每象素所占位數(shù),。 dwbytesinres:這份資源所占字節(jié)數(shù) dwimageoffset:圖像數(shù)據(jù)(iconimage)起點偏移位置。
2.1圖像數(shù)據(jù)段
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;
icheader:其中的icheader采用的是DIB結(jié)構(gòu)的BMP文件(常用)的位圖信息頭的定義類型(參見BMP文件結(jié)構(gòu)分析),, iccolors :色彩表 icxor:DIB結(jié)構(gòu)的圖像數(shù)據(jù),。XOR掩碼? icand:DIB結(jié)構(gòu)的圖像數(shù)據(jù),。AND掩碼
2.2 DIB位圖信息頭(BITMAPINFOHEADER)
typedef struct tagBITMAPINFOHEADER { /* bmih */ DWORD biSize; // Bitmap Header Size LONG biWidth; //Widdth LONG biHeight; //Height WORD biPlanes; //Planes WORD biBitCount; // Bits Per Pixel, DWORD biCompression; // Compression DWORD biSizeImage; //;Bitmap Data Size LONG biXPelsPerMeter; // HResolution LONG biYPelsPerMeter; // VResolution DWORD biClrUsed; //Colors DWORD biClrImportant; // Important Colors } BITMAPINFOHEADER;
biSize :BITMAPINFOHEADER段尺寸,。* biWidth:位圖的寬度,以象素為單位* biHeight:位圖的高度,,以象素為單位* biPlanes: 位圖的位面數(shù)(注:該值將總是1)* biBitCount:每個象素的位數(shù)* biCompression:壓縮說明: biSizeImage:用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小。該數(shù)必須是4的倍數(shù)* biXPelsPerMeter:用象素/米表示的水平分辨率 biYPelsPerMeter:用象素/米表示的垂直分辨率 biClrUsed:位圖使用的顏色數(shù),。如8-比特/象素表示為100h或者 256. biClrImportant:指定重要的顏色數(shù),。當(dāng)該域的值等于顏色數(shù)時(或者等于0時),,表示所有顏
2.2色彩表(RGBQUAD)
typedef struct tagRGBQUAD { /* rgbq */ BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD;
rgbBlue: 指定藍(lán)色強度 rgbGreen:指定綠色強度 rgbRed: 指定紅色強度 rgbReserved 保留,設(shè)置為0
|