用Delphi实现24位真彩色图标

豆豆网   技术应用频道   2006年08月01日  【字号: 收藏本文

本文详细介绍用Delphi实现24位真彩色图标

  tagIconDirEntry = packed record
bWidth:BYTE;// 图标图片的显示宽度,以像素为单位,最大值为255 ($10=16D)
bHeight:BYTE;// 图标图片的显示高度,以像素为单位,最大值为255 ($10=16D)
bColorCount:BYTE;// 图标图片的颜色数($00)
bReserved:BYTE;// 保留域总是 0 ($00)
wPlanes:WORD;// 图标图片的位面数 ($00 00)
wBitCount:WORD;// 图标图片的颜色深度($00 00)
dwBytesInRes:DWORD;// 图标图片占用的数据量($00000568)
dwImageOffset:DWORD; // 图标图片的开始位置 ($00000046)
end;.// 这个结构是16个字节

  上面说的idCount 表示图标文件里包含的图标个数,每个图标都要有一个tagIconDirEntry结构来表示图标的具体信息。根据本结构的dwBytesInRes和dwImageOffset我们就可以确定图片(图标)的位置了。在该位置的数据是一个称为agIconImage的记录,它是这样定义的:

  tagIconImage = packed record
icHeader:TBitmapInfoHeader; //BMP文件的信息头
icColors:array[0..0]of TRGBQuad;
icXOR:array[0..0]of BYTE;
icAND:array[0..0]of BYTE;
end;

  从这个定义中我们可以看出,这个内容就是一个标准的位图格式,只不过多了两项,icXOR和icAND,普通的位图信息里是没有这2 个成员的。大家知道,图标在被显示时,是利用遮罩方法将 2 副位图在同一个位置显示才产生任意轮廓的,先使用 XOR 位 图抠出需要显示的区域,然后再在抠出的区域中显示出需要显示的图形。由于这个缘故,图标的位图格式中的位图信息头 ( TBitmapInfoHeader ) 是 2 个位图共用 的。它与普通位图头信息最大的不同是 TBitmapInfoHeader.biHeight 成员,显然它是 2 副位图高度的总和。讲到这里,我们需要对位图(BMP)文件的格式有些了解了。

来源:计算机与信息技术    作者:李金刚    责编:豆豆技术应用

正在加载评论...