> 文章列表 > 图标文件格式转换(图标文件格式)

图标文件格式转换(图标文件格式)

图标文件格式转换(图标文件格式)

关于图标文件格式转换,图标文件格式这个很多人还不知道,今天小六来为大家解答以上的问题,现在让我们一起来看看吧!

1、图标文件格式图标文件(*.ico)由图标文件头、图片入口数据和图片数据三个部分组成,这三个部分的具体结构如下:1.图标文件头图标文件头包括三个部分6个字节,他们分别是数据类型字节含义说明WORD2保留字段(wReserved)必须0WORD2文件类型(wType)必须1WORD2图片数量(wCount)表示该图标文件包含多少个图片2.图片入口接下来是wCount个“图片入口”数据。

2、每个“图片入口”数据结构如下:数据类型字节含义说明BYTE1图像宽度(bWidth)单位:像素。

3、256px的图片该值为0BYTE1图像高度(bHeight)同上BYTE1颜色数(bClrCount)不重要BYTE1保留字段(bReserved)必须为0WORD2平面数(wPlanes)一般为1WORD2比特数(wBitCount)颜色深度,取值4位、8位、24位和32位DWORD4数据大小(dwImageSize)对应图片数据占用的字节数DWORD4数据位置(dwOffset)对应图片数据在文件中的位置3.图片数据对于256X256像素的图片,在文件中存储的格式是PNG,只要将整个PNG文件写在数据区就可以了,对应前面的图片入口的数据大小(dwImageSize)也是PNG文件的大小。

4、但是XP操作系统不认该图片。

5、对于其他图片,该区域存放了一个目标颜色深度(wBitCount)的数据位图后面跟一个对应的遮罩位图。

6、系统在绘制图标时会先将遮罩位图与目标设备“与”拷贝(SRCAND),然后在把数据位图与目标设备“异或”拷贝(SRCINVERT)。

7、数据位图的颜色深度可以是4位16色、8位256色、24位真彩色或32位带Alpha通道。

8、需要注意的是就算是32位带Alpha通道的位图也是需要遮罩位图的。

9、遮罩位图是一个1位颜色深度的2值位图,有图像的位置填0,透明的位置填1。

10、数据位图的结构与普通位图结构基本相似,但是缺少14位的位图文件头。

11、具体包含位图信息头、颜色表(只有4位和8位的位图才会有,4位的位图颜色表长度为16X4=64字节,8位的位图颜色表长度为256X4=1024字节)和数据区。

12、位图信息头结构如下:数据类型字节含义说明DWORD4结构大小(biSize)固定为40LONG4图像宽度(biWidth)单位:像素LONG4图像高度(biHeight)单位:像素。

13、由于还有遮罩因此要X2WORD2平面数(biPlanes)一般为1WORD2比特数(biBitCount)颜色深度,取值4位、8位、24位和32位DWORD4压缩(biCompression)一般为0DWORD4数据大小(biSizeImage)LONG4分辨率(biXPelsPerMeter)LONG4分辨率(biYPelsPerMeter)DWORD4使用颜色(biClrUsed)DWORD4重要颜色(biClrImportant)获取数据位图可以用如下办法:先利用CImage类创建一个目标大小和颜色深度的位图。

14、注意:4位和8位的位图需要设置颜色表,不然无法从源图片复制数据,颜色表可以采用固定的数据。

15、32位位图需要开启Alpha通道,不然无法复制Alpha通道的数据。

16、然后利用CImage::GetDC、CImage::ReleaseDC、CImage::GetPixelAddress和CImage::Draw等函数从源图复制图像数据到该位图。

17、接着将该位图保存到一个临时位图文件中。

18、从该文件中读取。

本文到此分享完毕,希望对大家有所帮助。