欢迎来到山村网

带你了解ico图标文件格式

2019-03-02 14:42:31浏览:400 来源:山村网   
核心摘要:  现在有很多图标采用的都是ico格式,ico图标文件可以存储单个图案,也可以存储多尺寸、多色板。下面我们就来了解下ico图标文

  现在有很多图标采用的都是ico格式,ico图标文件可以存储单个图案,也可以存储多尺寸、多色板。下面我们就来了解下ico图标文件格式构成。

带你了解ico图标文件格式 山村

  图标文件格式

  图标文件(*.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等函数从源图复制图像数据到该位图。

  接着将该位图保存到一个临时位图文件中。从该文件中读取。

(责任编辑:豆豆)
下一篇:

Swift编程语言入门之对象与类

上一篇:

图标文件格式之单色图标详细介绍

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com