图标文件(*.ico)由图标文件头、图片入口数据和图片数据三个部分组成,这三个部分的具体结构如下:
1. 图标文件头
图标文件头包括三个部分6个字节,他们分别是
数据类型 | 字节 | 含义 | 说明 |
WORD | 2 | 保留字段(wReserved) | 必须0 |
WORD | 2 | 文件类型(wType) | 必须1 |
WORD | 2 | 图片数量(wCount) | 表示该图标文件包含多少个图片 |
2. 图片入口
接下来是wCount个“图片入口”数据。每个“图片入口”数据结构如下:
数据类型 | 字节 | 含义 | 说明 |
BYTE | 1 | 图像宽度(bWidth) | 单位:像素。256px的图片该值为0 |
BYTE | 1 | 图像高度(bHeight) | 同上 |
BYTE | 1 | 颜色数(bClrCount) | 不重要 |
BYTE | 1 | 保留字段(bReserved) | 必须为0 |
WORD | 2 | 平面数(wPlanes) | 一般为1 |
WORD | 2 | 比特数(wBitCount) | 颜色深度,取值4位、8位、24位和32位 |
DWORD | 4 | 数据大小(dwImageSize) | 对应图片数据占用的字节数 |
DWORD | 4 | 数据位置(dwOffset) | 对应图片数据在文件中的位置 |
3. 图片数据
对于256X256像素的图片,在文件中存储的格式是PNG,只要将整个PNG文件写在数据区就可以了,对应前面的图片入口的数据大小(dwImageSize)也是PNG文件的大小。但是XP操作系统不认该图片。
对于其他图片,该区域存放了一个目标颜色深度(wBitCount)的数据位图后面跟一个对应的遮罩位图。系统在绘制图标时会先将遮罩位图与目标设备“与”拷贝(SRCAND),然后在把数据位图与目标设备“异或”拷贝(SRCINVERT)。
数据位图的颜色深度可以是4位16色、8位256色、24位真彩色或32位带Alpha通道。需要注意的是就算是32位带Alpha通道的位图也是需要遮罩位图的。
遮罩位图是一个1位颜色深度的2值位图,有图像的位置填0,透明的位置填1。
数据位图的结构与普通位图结构基本相似,但是缺少14位的位图文件头。具体包含位图信息头、颜色表(只有4位和8位的位图才会有,4位的位图颜色表长度为16X4=64字节,8位的位图颜色表长度为256X4=1024字节)和数据区。
位图信息头结构如下:
数据类型 | 字节 | 含义 | 说明 |
DWORD | 4 | 结构大小(biSize) | 固定为40 |
LONG | 4 | 图像宽度(biWidth) | 单位:像素 |
LONG | 4 | 图像高度(biHeight) | 单位:像素。由于还有遮罩因此要X 2 |
WORD | 2 | 平面数(biPlanes) | 一般为1 |
WORD | 2 | 比特数(biBitCount) | 颜色深度,取值4位、8位、24位和32位 |
DWORD | 4 | 压缩(biCompression) | 一般为0 |
DWORD | 4 | 数据大小(biSizeImage) | |
LONG | 4 | 分辨率(biXPelsPerMeter) | |
LONG | 4 | 分辨率(biYPelsPerMeter) | |
DWORD | 4 | 使用颜色(biClrUsed) | |
DWORD | 4 | 重要颜色(biClrImportant) |
获取数据位图可以用如下办法:
先利用CImage类创建一个目标大小和颜色深度的位图。注意:4位和8位的位图需要设置颜色表,不然无法从源图片复制数据,颜色表可以采用固定的数据。32位位图需要开启Alpha通道,不然无法复制Alpha通道的数据。
然后利用CImage::GetDC、CImage::ReleaseDC、CImage:: GetPixelAddress和CImage::Draw等函数从源图复制图像数据到该位图。
接着将该位图保存到一个临时位图文件中。从该文件中读取
最近更新
淘宝微信支付怎么开通?9月5日淘宝公示与微信
人气排行
VisualStudio2017正式版下载地址分享。VisualStudio2017正式版已
UltraEdit简称UE编辑器,是很多码农朋友常用的一款编辑器,工作上
SublimeText3是一款非常好用的文本编辑器软件,用上sublimetext3
学习cad掌握cad快捷键命令是基础,下面为大家介绍2016cad快捷键命
刚刚发布的AutoCAD2015是Autodesk公司出品的CAD软件,借助AutoCA
现在随着CAXA电子图板的广泛普及,越来越多的企业选择CAXA电子图
相信SQLServer2008的朋友,有时候会遇到:用过通过端口1433连接到
SQL在企业中也是非常重要的应用,各种财务系统,ERP系统,OA系统
VS2010是一个集C++,VB,C#,等编程环境于一身的集成开发环境,功能
Mysql是一款功能强大的数据库软件,Mysql安装图文教程将介绍如何安