首页 > 网站 > 建站经验 > 正文

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

2019-11-02 14:14:54
字体:
来源:转载
供稿:网友

   图标文件格式有多种,常见的有PNG、ICL、IP,还有就是接下来小编要为大家介绍的ICO格式图标,ICO格式图标一种单色图标,广泛存在于windows系统中的dll、exe文件中。

图标文件格式之单色图标详细介绍 电脑高手

  ICON文件有一个固定的文件头,它的数据结构如下:

  typedef struct {

  WORD idReserved;

  WORD idType;

  WORD idCount;

  ICONDIRENTRY idEntries[1];

  } ICONDIR, *LPICONDIR;

  其中idReserved为系统保留的字段必须为0

  其中idType为资源类型,1为图标,2为光标

  其中idCount为ICON图标资源中包含多个少图像组成

  其中idEntries是一个指向ICONDIRENTRY结构体的数据它的长度是由idCount来决定的.

  接下来我们看一看ICONDIRENTRY的结构体是如何定义的吧!

  typedef struct {

  BYTE bWidth;

  BYTE bHeight;

  BYTE bColorCount;

  BYTE bReserved;

  WORD wPlanes;

  WORD wBitCount;

  DWORD dwBytesInRes;

  DWORD dwImageOffset;

  } ICONDIRENTRY, *LPICONDIRENTRY;

  又是一长串的结构体...

  *bWidth和bHeight表示了图像的宽和高,起初,系统只支持1到255的大小,即2^8-1的大小,

  但是从Widnows95开始,可以支持到256的大小了.

  *wBitCount和wPlanes用来描述图像的颜色深度,对于单色图标来说,它们都是1.

  *bReserved是系统保留字段为0

  *dwBytesinRes表示图像数据大小

  *dwImageOffse表示图像数据的位置即偏移地址.

  *但是有个地方是值得注意的,bColorCount它被假定的认为等于图像的颜色数量,也就是说它等于:

  bColorCount = 1 << (wBitCount * wPlanes)

  当wBitCount * wPlanes >= 8时,则bColorCount为0

  *在现实情况中,很多人懒得填写bColorCount的值,即使是4色或16色的图标,也把它设为0.从Windows XP开始,

  Windows会检测这个常见的错误,但是对于planar位图来说,这个自动纠错的机制还是有些问题的,幸运的是,几乎没有人使用planar位图了.

  但是你还是不应该依赖于Windows提供的自动纠错机制,而正确的填写bColorCount的值.错误的bColorCount意味

西瓜电影网[www.aikan.tv/special/xiguadianyingwang/]
着,由于提供了错误的颜色深度信息,

  Windows可能会在ico文件中选择一个不怎么理想的图像.

  *单色图标由两个位图组成,常称为掩码,分别被称为AND和XOR,绘制图标分为两个步骤:首先mask和screen作"与"操作,然后再做"异或"操作.

  pixel = (screen AND mask) XOR image

  为mask和image选择适当的值,可以覆盖所有单色blt的操作.

  mask image 结果 操作

  0 0 (screen AND 0) XOR 0 = 0 黑色

  0 1 (screen AND 0) XOR 1 = 1 白色

  1 0 (screen AND 1) XOR 0 = screen 不变

  1 1 (screen AND 1) XOR 1 = NOT screen 反色

  *理论上说,mask指定了image的像素是否拷贝到屏幕上,mask中黑色的像素表示要将image中相应的像素拷贝到屏幕上.

  *mask和image位图在物理上是保存为单个但是双倍高度的DIB.首先是image位图,然后是mask.由于DIB是自下而上的保存格式,

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表