图标(ico,cur)文件的结构解析

因为编写一个图标编辑程序,分析了一下图标的文件格式,颇有一些心得,写出 来与各位兄弟共享。(笔者注:以下所说的图标均为调色板模式的图标,真彩图标会特别注 
明)

一、从图标的显示原理说起 

  每个图标都是由 两个单独的位图组成的。如果该图标是屏蔽背景色的话,那么,第一个位图是由黑色背景(相关的颜色位全为 0)与彩色图标图案组成的,该位图将与当前屏幕显示 通过异或操作(XOR)结合起来,故称其为XOR位图;第二个位图是由白色背景(相关的颜色位全为1)与黑色图标图案(相关的颜色位全为0)组成的,该位图将与当前屏幕显示通过 与操作(AND)结合起来,故称其为AND位图。因此,图标的显示是通过两个步骤完成的: 

1.当前屏幕显示与AND位图通过AND操作结合起来; 
2.当前屏幕显示与XOR位图通过XOR操作结合起来。 
  大家知道,1与任何数值AND操作的结果将维持原数值,而0与任何数值AND操作的结果则 是0,因此在步骤1中,AND位图中的白色(1)与屏幕显示经过AND操作后被原色彩屏蔽,而黑 色(0)则将原色彩屏蔽

步骤1结束后,屏幕上将留下一个黑色的图标图案。在随后的步骤 2中,由于0与任何数值异或的结果都将是原数值,因此,XOR位图与屏幕显示经过异或操作后, 
位图和屏幕中的黑色部分都将被各自对应的彩色部分屏蔽。步骤2结束后,一个形状不规则的 图标图案就出现在屏幕上了,这就是图标显示的原理。

二、图标的图形 

  图标的图形,实际上就是位图格式的图片,是一个标准的位图格式。Windows只要从BMP信息头中获取信息就足够了,它据以解释在其后出现的数据应该如何处理。 如果是调色板模式,其后的数据包含有调色板和像素点颜色索引,如果是真彩色,其后的数据直接就是像素点的 RGB 颜色值。 
  而位图文件是由文件头、BMP 信息头、调色板、数据区(又称位图点阵)等几个部分组 的。知道了这个情况,我们可以简单地把上面叙述的图标图形结构理解为位图信息。这样, 我们就有可能根本不需要真的去画一幅图,而只需要对关键数据进行程序填充就可以了,所编写的代码,直接按图标格式的要求,可把一个只要尺寸不大于255×255像素的任意位图, 封装成标准格式的图标(真实的位图宽高尺寸保持不变,所以可以做出最大255×255的图标 来)。

三、图标的数据结构 
  图标文件的数据结构可分为6部分,其数据结构如下: 


----------------------------------------------------------------------- 
顺号 名称      长度(单位:字节)  说明 
----------------------------------------------------------------------- 
1  文件头     6         
2  图象信息块   16          有多少个图像,则信息块也有多少个 
3  BMP 信息头   40           
4  XOR 位图调色板 16色=64,256色=1024  真彩图标从此开始像素点的 RGB 值  
5  XOR 位图               以调色板的索引值形式存放 
6   AND位图   
----------------------------------------------------------------------- 
说明: 
1.上表中的3-6部分合称图像数据块,其中5、6部分又合称为图像数据区(也称位图点阵) 
2.不论何种规格的图标,其1-3部分的字节长度是固定的。 
3.请注意第 2部分的图象信息块的说明,“如果有多少个图像”是什么意思呢?原来,在一 
 个图标文件中,有可能存放几个图像(windows图标最多可有8个图像),但每个图像都有 
 自己的调色板、XOR 位图和 AND 位图,且它们的图像大小也可能不相同。以16色有3个图 
 像为例,其数据结构如下: 
----------------------------------------------------------------- 

--------------------------------------------------------------------------------
 
2  图标文件的数据结构之研究  
  顺号 名称        长度 说明 
----------------------------------------------------------------- 
1  文件头              6 
2  图象1的图象信息块   16   
3  图象2的图象信息块   16 
4  图象3的图象信息块   16 
5  图象1的图象数据块   不定 其中BMP信息头和调色板固定为40和64字节 
6  图象2的图象数据块   不定 同上 
7  图象3的图象数据块   不定 同上 
------------------------------------------------------------------

  下面以内含1个图像、16色、16×16规格的图标为例详述(偏移量括号前为10进制,括 
号内为16进制): 
---------------------------------------------------------------------------- 
偏移量  字节数  描述               典型值(16进制) 
---------------------------------------------------------------------------- 
 (一、文件头6字节) 
000(000)2    保留的字节            00 00 
002(002)2    资源类型             01 00 (01为图标,02为光标) 
004(004)2    图象个数             01 00 
 (二、图像信息块16字节)  
006(006)1    图标宽度             10 
007(007)1    图标高度             10 
008(008)1    颜色计数             10(02=单色, 00≥256色) 
009(009)1    未用                00 
010(00A)4    保留的              00 00 00 00 
014(00E)4    图象数据块的长度                28 01 00 00(10进制=296) 
018(012)4    图象数据块相对于文件头部的偏移量 16 00 00 00(10进制=22) 
 (三、BMP信息头40字节) 
022(016)4    BMP 信息头结构长度        28 00 00 00(10进制=40)  
026(01A)4    图像宽度              10 00 00 00 
030(01E)4    图像高度(XOR图高度+AND图高度) 20 00 00 00 
034(022)2    位面板数                         01 00 
036(024)2    每象素所占位数                   04 00 
038(026)4    象素数据的压缩类型        00 00 00 00(表示未压缩) 
042(02A)4    图象数据的长度          C0 00 00 00(10进制=192) 
046(02E)16   未用               16个00 
 (四、XOR位图的调色板64字节) 
062(03E)1    蓝色分量  
063(03F)1    绿色分量  
064(040)1    红色分量  
065(041)1    未用               00  
  …… 
 (五、XOR位图的数据)  
126(07E)128   XOR位图               
 (六、单色AND位图的数据) 
254(0FE)64   AND位图 
----------------------------------------------------------------------------- 
说明: 
1.上表中有关长度的数据,遵循“低位在前,高位在后”的原则。例如偏移量为00E的图象数 
 据块的长度是28 01 00 00,在计算时要把它们反过来,变成00 00 01 28,实际就是16进 
 制的128即10进制的296。 
2.偏移量为024的“每象素所占位数”是指每个象素在XOR位图中所占的位数(1个字节=8位) 
 ,04表示每个象素占4位,换言之,就是说XOR位图中每个字节可表示2个象素。该数据如为 
 01 00,则表示单色(黑白位图),04 00为16色,08 00为256色,18 00为24位真彩。 
3.XOR位图每字节对应2个像素(16色)或1个像素(256色),它的排列规律是:倒向(最末行的 
 像素在最前,由
此类推),行内像素按从左至右的顺序,字节高位表示靠左的像素。AND位 
 图每字节对应8个象素(每位对应1个象素),排列规律与XOR位图相同。 
 
 
  
--------------------------------------------------------------------------------
 
3  图标文件的数据结构之研究  


4.真彩图标没有调色板,而是在第 3部分 BMP 信息头的后面直接存放像素的 RGB 值,24位 
 真彩图标的每 3个字节对应1个像素值
,其中每个字节分别对应该像素值的R、G、B值。像 
 素排列规律与调色板模式的图标相同 

  下面是各种图标的调色板、图像数据的长度及总长度,括号内是偏移量:

单位:字节 
------------------------------------------------------ 
图标规格     调色板   XOR位图   AND位图  总长度 
------------------------------------------------------ 
16 色16×16象素 (62)  64  (126)  128  (254)  64   318 
16 色24×24象素 (62)  64 (126)  288 (414)  96   510 
16 色32×32象素 (62)  64 (126)  512 (638) 128  766 
16 色48×48象素 (62)  64 (126) 1152  (1278)384  1662 
256色16×16象素 (62)1024 (1086) 256  (1342) 64 1406     
256色24×24象素 (62)1024 (1086) 576 (1662) 96 1758 
256色32×32象素 (62)1024 (1086)1024  (2110)128  2238 
256色48×48象素 (62)1024 (1086)2304  (3390)384 3774 
------------------------------------------------------ 
说明: 
1.XOR位图每字节对应2个像素(16色)或1个像素(256色) 
2.AND位图每4字节为一组(48×48图标的AND位图每8个字节为一组),组内每个颜色位对 
 应1个象素。注意: 
 ①16×16图标每组的后2个字节不用,所以实际上是2字节(16位)对应一行16个象素 
 ②24×24图标每组的最后1个字节不用,所以实际上是3字节(24位)对应一行24个象素 
 ③32×32图标每组4个字节32位对应一行32个象素 
 ④48×48图标每组的后2个字节不用,所以实际上是6字节(48位)对应一行48个象素 
3.为什么AND位图中会有不用的字节呢,这不是浪费吗?原来,Windows有一个规定,每一条 
 扫描线(位图中的一行数据信息叫做一条扫描线)必须结束于一个32位的边界。也就是说, 
 一条扫描线的位长度(按位计算)必须能整除32,或字节长度必须能整除4,也就是说,如 
 果只有8位,那么拿空白的24位来补充,如果只有48位,那么也就拿空白的16位来补充。 
4.要使背景透明,XOR位图的背景必须为黑色(对应的颜色位=0),图案为彩色,而 AND位 
 图则背景必须为白色(对应的颜色位=1),图案为黑色(对应的颜色位=0) 
5.XOR位图的彩色图形信息中存储的并不是颜色值,而是与调色板对应的索引值,从 0 开始 
 编号

四、图标的颜色 
  调色板模式的图标,其颜色是由调色板确定的,而调色板是可以自行定义的。比如16色 
图标,其调色板只要有16种颜色就行。下面是以 QBasic 的16种颜色作为调色板时,XOR 位 
图调色板的16色索引值与 QBColor 的颜色值对照: 
---------------------------------------------------- 
颜色  索引值  QBasic 调色板中的值(最后一个字节未用)  
---------------------------------------------------- 
黑色  0       0      00 00 00   00 
深红  1       4      00 00 80   00 
深绿  2       2      00 80 00   00 
深黄  3       6      00 80 80   00 
深蓝  4       1      80 00 00   00 
深紫  5       5      80 00 80   00 
深青  6       3      80 80 00   00 
深灰  7       8      80 80 80   00 
浅灰    8       7      C0 C0 C0   00 
红色  9       C(12)  00 00 FF   00 
绿色  A(10)   A(10)  00 FF 00   00 
黄色  B(11)   E(14)  00 FF FF   00 
蓝色  C(12)   9      FF 00 00   00 
紫色  D(13)   D(13)  FF 00 FF   00 
青色  E(14)   B(11)  FF FF 00   00 
白色  F(15)   F(15)  FF FF FF   00 
----------------------------------------------------

  怎么个对应法呢?举个例来说,比如 XOR位图中某个字节值为81,那就表示该字节所对 
 
 
   
  作者: 218.75.202.*  2005-12-8 08:07   回复此发言    
  
--------------------------------------------------------------------------------
 
4  图标文件的数据结构之研究  
  应的2个象素,左边的象素为浅灰色而右边的象素为深红色。

五、一个具体的例子 
  有一个16色16×16象素的图标,该图标是一个红色的大“口”字形,其全部数据如下: 
------------------------------------------------------ 
偏移量 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 
------------------------------------------------------ 
000    00 00 01 00 01 00 10 10 10 00 00 00 00 00 28 01 
010    00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00 
020    00 00 01 00 04 00 00 00 00 00 C0 00 00 00 00 00 
030    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
040    00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00 
050    00 00 80 00 80 00 80 80 00 00 80 80 80 00 C0 C0 
060    C0 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00 
070    00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 99 99 
080    99 99 99 99 99 99 90 00 00 00 00 00 00 09 90 00 
090    00 00 00 00 00 09 90 00 00 00 00 00 00 09 90 00 
0A0    00 00 00 00 00 09 90 00 00 00 00 00 00 09 90 00 
0B0    00 00 00 00 00 09 90 00 00 00 00 00 00 09 90 00 
0C0    00 00 00 00 00 09 90 00 00 00 00 00 00 09 90 00 
0D0    00 00 00 00 00 09 90 00 00 00 00 00 00 09 90 00 
0E0    00 00 00 00 00 09 90 00 00 00 00 00 00 09 90 00 
0F0    00 00 00 00 00 09 99 99 99 99 99 99 99 99 00 00 
100    00 00
7F FE 00 00 7F FE 00 00 7F FE 00 00 7F FE 
110    00 00 7F FE 00 00 7F FE 00 00 7F FE 00 00 7F FE 
120    00 00 7F FE 00 00 7F FE 00 00 7F FE 00 00 7F FE 
130    00 00 7F FE 00 00 7F FE 00 00 00 00 00 00 
------------------------------------------------------

  下面对位图部分的数据加以说明: 
1.XOR位图最末一行的数据在07E-085这8个字节中,由于是一条红线,所以索引值均为9 
2.XOR位图倒数第二行的数据在086-08D这8个字节中,该行的首尾2个象素为红色,其余14个 
 象素为背景色,所以086字节所对应象素的颜色索引值分别为9、0,而08D字节所对应象素 
 的颜色索引值分别为0、9,因为要屏蔽背景色,所以除了红色外,其余均为黑色,黑色在 
 调色板中的索引值为0。其余行的数据也照此分析。 
3.AND位图最末一行的数据在0FE-101这4个字节中,后2个字节没用,前2个字节为00 00, 
 因为要屏蔽背景色,AND位图的图象位必须为0(黑色),而不管这图象原来是什么颜色, 
 所以,这一行是红线,相应的颜色位就全是0了。 
4.AND位图倒数第二行的数据在102-105这 4个字节中,前2个字节对应该行的16个象素,其 
 值为7F FE。先看7F,其二进制为 01111111,因为该行首个象素为红色,所以对应的最高 
 位为0(黑色),跟着的7个象素都是背景色,而在AND位图中,要屏蔽背景色,那么背景色 
 的对应位应该是白色,白色在单色中表示为1,所以这8个象素所表示的16进制值就是7F了。 
 再看FE,其二进制值为 11111110,它对应的该行后8个象素,而该行最后1个象素是红色, 
 所以对应的最低位为0(黑色),其它象素是背景色,所以对应的位都是1(白色)。 
5.其它行的数据,诸位兄弟可以比照上述的方法自行分析。



二、调试总结

1、


得到的AND图数据为:

0000: ff ff ff ff ff ff ff ff ff ff ff ff f9 ff ff ff  ................
	0010: f8 ff ff ff f8 7f ff ff f8 1f ff ff f8 0f ff ff  ................
	0020: fc 07 ff ff fc 01 ff ff fc 00 ff ff fc 00 7f ff  ................
	0030: fc 00 1f ff fe 00 0f ff fe 00 07 ff fe 00 01 ff  ................
	0040: fe 00 00 ff fe 00 00 3f fe 00 00 1f ff 00 00 1f  .......?........
	0050: ff 00 00 7f ff 00 01 ff ff 00 0f ff ff 00 3f ff  ..............?.
	0060: ff 80 7f ff ff 80 ff ff ff 81 ff ff ff 83 ff ff  ................
	0070: ff 8f ff ff ff df ff ff ff ff ff ff ff ff ff ff  ................
	0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00d0: 00 00 00 00 00 00 00 00 e2 e3 03 00 00 00 00 00  ................
	00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00f0: 00 00 00 00 00 00 00 00 e4 e5 e6 e7 00 00 00 00  ................



得到的XOR图数据为:

0000: ff ff ff ff ff ff ff ff ff ff ff ff f9 ff ff ff  ................
	0010: f8 ff ff ff f8 7f ff ff f8 1f ff ff f8 0f ff ff  ................
	0020: fc 07 ff ff fc 01 ff ff fc 00 ff ff fc 00 7f ff  ................
	0030: fc 00 1f ff fe 00 0f ff fe 00 07 ff fe 00 01 ff  ................
	0040: fe 00 00 ff fe 00 00 3f fe 00 00 1f ff 00 00 1f  .......?........
	0050: ff 00 00 7f ff 00 01 ff ff 00 0f ff ff 00 3f ff  ..............?.
	0060: ff 80 7f ff ff 80 ff ff ff 81 ff ff ff 83 ff ff  ................
	0070: ff 8f ff ff ff df ff ff ff ff ff ff ff ff ff ff  ................
	0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00d0: 00 00 00 00 00 00 00 00 e2 e3 03 00 00 00 00 00  ................
	00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	00f0: 00 00 00 00 00 00 00 00 e4 e5 e6 e7 00 00 00 00  ................
	0100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0110: 0c 0a 06 00 22 1e 14 00 04 04 04 00 00 00 00 00  ...."...........
	0120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0190: 10 0e 08 00 64 58 3a 00 32 2e 20 00 1a 18 12 00  ....dX:.2. .....
	01a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	01b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	01c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	01d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	01e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	01f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0210: 38 32 20 00 64 56 36 00 86 76 4c 00 4e 44 2c 00  82 .dV6..vL.ND,.
	0220: 36 30 20 00 08 08 08 00 00 00 00 00 00 00 00 00  60 .............
	0230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0290: 1c 18 10 00 54 48 2c 00 80 6e 40 00 88 7a 4e 00  ....TH,..n@..zN.
	02a0: 58 48 20 00 20 1c 14 00 00 00 00 00 00 00 00 00  XH . ...........
	02b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	02c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	02d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	02e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	02f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0310: 06 04 02 00 40 38 24 00 74 60 2c 00 ba b4 a6 00  ....@8$.t`,.....
	0320: 8e 7e 56 00 6c 58 24 00 40 38 24 00 16 16 10 00  .~V.lX$.@8$.....
	0330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0390: 00 00 00 00 3c 36 24 00 68 54 1e 00 a4 9a 7e 00  ....<6$.hT....~.
	03a0: d0 ce c8 00 98 8a 64 00 66 50 12 00 48 3c 1c 00  ......d.fP..H<..
	03b0: 20 1e 16 00 00 00 00 00 00 00 00 00 00 00 00 00   ...............
	03c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	03d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	03e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	03f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0410: 00 00 00 00 28 24 18 00 66 54 22 00 7a 66 34 00  ....($..fT".zf4.
	0420: ce ce cc 00 de de de 00 a0 94 74 00 68 50 0c 00  ..........t.hP..
	0430: 58 48 1c 00 1c 18 10 00 0c 0c 0c 00 00 00 00 00  XH..............
	0440: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0450: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0490: 00 00 00 00 10 0e 08 00 60 50 24 00 5c 44 08 00  ........`P$.\D..
	04a0: b4 b0 a0 00 d0 d0 d0 00 e4 e4 e0 00 a8 9c 84 00  ................
	04b0: 64 4c 08 00 64 50 10 00 34 2c 18 00 24 20 18 00  dL..dP..4,..$ ..
	04c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	04d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	04e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	04f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0510: 00 00 00 00 04 04 04 00 48 3c 18 00 54 3c 00 00  ........H<..T<..
	0520: 90 84 5c 00 c8 c8 c8 00 dc dc dc 00 f0 f0 f0 00  ..\.............
	0530: b0 a8 90 00 6c 54 18 00 64 4c 08 00 48 3c 1c 00  ....lT..dL..H<..
	0540: 10 0e 08 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0590: 00 00 00 00 00 00 00 00 34 28 08 00 50 3c 00 00  ........4(..P<..
	05a0: 70 5c 28 00 c0 bc b4 00 cc cc cc 00 e0 e0 e0 00  p\(.............
	05b0: ec ec ec 00 bc b8 a8 00 6c 54 18 00 64 48 04 00  ........lT..dH..
	05c0: 54 44 14 00 24 20 18 00 00 00 00 00 00 00 00 00  TD..$ ..........
	05d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	05e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	05f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0610: 00 00 00 00 00 00 00 00 24 1c 08 00 50 38 00 00  ........$...P8..
	0620: 58 44 0c 00 a8 a0 8c 00 c8 c8 c8 00 cc cc cc 00  XD..............
	0630: e8 e8 e8 00 f0 f0 f0 00 c0 bc b0 00 74 5c 24 00  ............t\$.
	0640: 60 44 00 00 60 4c 10 00 34 2c 14 00 16 16 10 00  `D..`L..4,......
	0650: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0690: 00 00 00 00 00 00 00 00 14 10 08 00 4c 38 00 00  ............L8..
	06a0: 50 38 00 00 84 74 4c 00 c8 c8 c8 00 c8 c8 c8 00  P8...tL.........
	06b0: d0 d0 d0 00 ec ec ec 00 f0 f0 f0 00 d4 d0 cc 00  ................
	06c0: 70 5c 28 00 60 44 00 00 5c 44 04 00 48 3c 1c 00  p\(.`D..\D..H<..
	06d0: 28 24 18 00 00 00 00 00 00 00 00 00 00 00 00 00  ($..............
	06e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	06f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0710: 00 00 00 00 00 00 00 00 30 24 0c 00 44 30 04 00  ........0$..D0..
	0720: 4c 38 00 00 5c 48 10 00 b8 b4 ac 00 c4 c4 c4 00  L8..\H..........
	0730: c0 c0 c0 00 c0 bc b0 00 e8 e8 e8 00 f0 f0 f0 00  ................
	0740: d4 d0 cc 00 78 68 3c 00 5c 44 04 00 5c 44 04 00  ....xh<.\D..\D..
	0750: 54 40 10 00 20 1c 10 00 1a 18 12 00 00 00 00 00  T@.. ...........
	0760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0790: 00 00 00 00 00 00 00 00 20 18 0c 00 3c 2c 04 00  ........ ...<,..
	07a0: 48 34 00 00 4c 38 00 00 98 8c 74 00 c0 c0 c0 00  H4..L8....t.....
	07b0: c0 c0 c0 00 ac a0 8c 00 b8 b4 a4 00 ec ec ec 00  ................
	07c0: f0 f0 f0 00 e4 e4 e0 00 84 74 4c 00 5c 44 00 00  .........tL.\D..
	07d0: 5c 44 00 00 5c 44 08 00 34 2c 18 00 30 28 14 00  \D..\D..4,..0(..
	07e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	07f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0810: 00 00 00 00 00 00 00 00 10 0c 08 00 34 28 08 00  ............4(..
	0820: 48 34 00 00 48 34 00 00 74 60 34 00 b8 b8 b4 00  H4..H4..t`4.....
	0830: bc bc bc 00 c0 bc b8 00 94 88 64 00 b8 b4 a4 00  ..........d.....
	0840: e8 e8 e8 00 f0 f0 f0 00 e0 e0 dc 00 8c 80 60 00  ..............`.
	0850: 60 48 08 00 5c 44 00 00 5c 44 04 00 40 34 0c 00  `H..\D..\D..@4..
	0860: 1c 18 10 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0890: 00 00 00 00 00 00 00 00 00 00 00 00 24 1c 08 00  ............$...
	08a0: 48 34 00 00 44 30 00 00 54 44 14 00 ac a8 9c 00  H4..D0..TD......
	08b0: b8 b8 b8 00 bc bc bc 00 a4 98 80 00 8c 7c 54 00  .............|T.
	08c0: b8 b4 a4 00 e4 e4 e4 00 ec ec ec 00 e4 e4 e4 00  ................
	08d0: 9c 90 78 00 60 48 08 00 58 40 00 00 58 40 00 00  ..x.`H..X@..X@..
	08e0: 58 44 0c 00 28 20 10 00 04 04 04 00 00 00 00 00  XD..( ..........
	08f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0910: 00 00 00 00 00 00 00 00 00 00 00 00 24 1c 0c 00  ............$...
	0920: 44 30 00 00 44 30 00 00 48 34 00 00 8c 80 60 00  D0..D0..H4....`.
	0930: b8 b8 b8 00 b4 b4 b4 00 b8 b4 ac 00 86 76 4c 00  .............vL.
	0940: 90 84 5c 00 b8 b4 a4 00 e0 e0 e0 00 ec ec ec 00  ..\.............
	0950: e4 e4 e0 00 b0 a8 90 00 8c 7c 58 00 78 68 3c 00  .........|X.xh<.
	0960: 68 54 1c 00 60 48 10 00 48 3c 20 00 20 1c 10 00  hT..`H..H< . ...
	0970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0990: 00 00 00 00 00 00 00 00 00 00 00 00 18 14 0c 00  ................
	09a0: 44 30 04 00 40 30 00 00 40 2c 00 00 60 4c 1c 00  D0..@0..@,..`L..
	09b0: b0 ac a8 00 b0 b0 b0 00 b8 b8 b8 00 a4 98 7c 00  ..............|.
	09c0: 84 74 48 00 90 84 54 00 ac a0 8c 00 c0 bc b4 00  .tH...T.........
	09d0: bc b8 ac 00 b4 b0 a4 00 b0 ac 9c 00 ac a8 9c 00  ................
	09e0: a0 9c 8c 00 7c 74 60 00 48 3c 20 00 1c 18 0c 00  ....|t`.H< .....
	09f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0a10: 00 00 00 00 00 00 00 00 00 00 00 00 08 08 08 00  ................
	0a20: 3c 2c 04 00 40 2c 00 00 3c 2c 00 00 48 34 00 00  <,..@,..<,..H4..
	0a30: 98 90 7c 00 b0 b0 b0 00 a8 a8 a8 00 c0 bc b4 00  ..|.............
	0a40: 80 6c 40 00 60 4c 10 00 60 48 08 00 5c 48 0c 00  .l@.`L..`H..\H..
	0a50: 5c 44 08 00 58 44 08 00 54 40 08 00 3c 2c 04 00  \D..XD..T@..<,..
	0a60: 20 18 00 00 18 14 04 00 08 08 04 00 00 00 00 00   ...............
	0a70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0a80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0a90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0aa0: 30 24 08 00 40 2c 00 00 3c 2c 00 00 38 28 00 00  0$..@,..<,..8(..
	0ab0: 78 68 44 00 a8 a8 a4 00 a4 a4 a4 00 a8 a8 a4 00  xhD.............
	0ac0: 68 54 20 00 60 44 00 00 60 44 00 00 5c 44 00 00  hT .`D..`D..\D..
	0ad0: 54 3c 00 00 3c 2c 00 00 1c 14 00 00 00 00 00 00  T<..<,..........
	0ae0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0af0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0b10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0b20: 24 1c 08 00 3c 2c 00 00 38 28 00 00 38 28 00 00  $...<,..8(..8(..
	0b30: 58 48 1c 00 9c 9c 94 00 a0 a0 a0 00 70 60 3c 00  XH..........p`<.
	0b40: 60 44 00 00 60 48 00 00 54 3c 00 00 30 24 00 00  `D..`H..T<..0$..
	0b50: 14 10 00 00 0c 08 00 00 00 00 00 00 00 00 00 00  ................
	0b60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0b70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ba0: 1c 18 08 00 3c 2c 04 00 38 28 00 00 34 28 00 00  ....<,..8(..4(..
	0bb0: 48 38 10 00 94 94 88 00 80 78 60 00 60 44 00 00  H8.......x`.`D..
	0bc0: 60 48 00 00 38 28 00 00 0c 08 00 00 00 00 00 00  `H..8(..........
	0bd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0c10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0c20: 10 0c 04 00 38 28 00 00 38 28 00 00 38 28 00 00  ....8(..8(..8(..
	0c30: 68 5c 40 00 94 90 84 00 64 50 10 00 64 48 00 00  h\@.....dP..dH..
	0c40: 34 24 00 00 0c 08 00 00 00 00 00 00 00 00 00 00  4$..............
	0c50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0c60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0c70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0c80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0c90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ca0: 24 1c 08 00 34 24 00 00 38 28 00 00 44 34 08 00  $...4$..8(..D4..
	0cb0: 88 84 70 00 6a 58 22 00 60 44 00 00 2c 20 00 00  ..p.jX".`D.., ..
	0cc0: 04 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0cd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ce0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0cf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d20: 14 10 08 00 2c 20 04 00 38 28 00 00 70 64 48 00  ...., ..8(..pdH.
	0d30: 78 68 44 00 64 48 04 00 28 1c 00 00 08 04 00 00  xhD.dH..(.......
	0d40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0d90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0da0: 08 08 08 00 28 20 04 00 4c 3c 14 00 78 6c 50 00  ....( ..L<..xlP.
	0db0: 58 40 04 00 2c 20 00 00 00 00 00 00 00 00 00 00  X@.., ..........
	0dc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0dd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0de0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0df0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e20: 00 00 00 00 2c 24 0c 00 64 58 34 00 5c 48 10 00  ....,$..dX4.\H..
	0e30: 20 18 00 00 20 18 00 00 00 00 00 00 00 00 00 00   ... ...........
	0e40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0e90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ea0: 00 00 00 00 18 14 04 00 3c 34 20 00 18 14 08 00  ........<4 .....
	0eb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ec0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ed0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ee0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ef0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f20: 00 00 00 00 00 00 00 00 14 10 08 00 10 0c 08 00  ................
	0f30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0f90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0fa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................



发现XOR图的最前面出现了AND图。且AND图的宽与XOR图的宽一样,可高去是XOR图的两倍。

这两块数据,我们调用CreateBitmap来生成HBITMAP:

XOR图的HBITMAP生成方法为:

	membmp = CreateBitmap(cursorBmp->width, cursorBmp->height, 1, 30,  cursorBmp->data + maskBmp->dataLength);
不解:

(1)为什么指定的bitCount是30呢,如果是32就会出现只有一条线的情况????

(2)为什么数据从cursorBmp->data开始也会出现只有一条线的情况呢????



AND图的HBITMAP生成方法为:

maskBmp->width = cursorBmp->width;
	maskBmp->height = cursorBmp->height;
	membmpMask = CreateBitmap(cursorBmp->width, cursorBmp->height, 1, 1, maskBmp->data);
	//MyCreateBitmapInternal(maskBmp, &membmpMask);

(3)如果要创建彩色的光标,那么不能调用CreateCursor API函数,因为它只能创建单色的光标。

而要用CreateIconIndirect


3 、调试Cursor总结:

(1)检查AND图是否正确

方法:XOR图的图先用一块都是0x0的数据来代。

XUINT8 *temp = (XUINT8*)malloc(cursorBmp->width*cursorBmp->height*32);
	memset(temp, 0x0, cursorBmp->width*cursorBmp->height*32);

cursorBmp->data = temp;

(2)把AND图、XOR图的数据DUMP出来进行对比。



  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件图标下载ico打包是指将各种文件类型的图标资源下载并打包成.ico格式的文件。.ico是一种常用的图标文件格式,通常用于在Windows系统中显示文件图标。 要完成文件图标下载ico打包的过程,首先需要找到合适的图标资源。可以通过搜索引擎或图标库网站找到各种类型的文件图标,如文本文档、图片、音频、视频等。选择和下载符合需求的图标资源,并将它们保存到本地计算机。 接下来,我们需要将下载的图标资源进行处理。为了打包成.ico格式的文件,需要使用专门的图标编辑软件。有很多免费的图标编辑软件可供选择,例如RealWorld Icon Editor、Axialis IconWorkshop等。打开选定的软件,导入之前下载的图标资源,然后进行编辑和调整。可以根据需要改变图标的尺寸、颜色、样式等。 编辑完成后,将图标资源保存为.ico格式的文件。在图标编辑软件中,选择"保存"或"另存为"选项,并选择.ico文件格式。然后选择保存的位置和文件名,将图标资源导出为.ico文件。 完成导出后,就得到了含有各种文件类型图标的.ico文件。这个文件可以在Windows操作系统中使用,可以将其用作文件的默认图标或自定义图标。将.ico文件放置在适当的文件夹中,然后在文件属性设置中选择该.ico文件作为文件图标。 总结起来,文件图标下载ico打包是一个将各种类型文件图标资源下载并保存为.ico格式文件的过程。通过找到合适的图标资源,使用图标编辑软件进行编辑和调整,并将其保存为.ico格式文件,最后在Windows系统中使用这些.ico文件作为文件图标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值