1.制造原理
调色板模式的 ico 文件的数据结构,可分为 6 部分:
1.ICON 文件头(6 字节)
2.ICON 图象信息块(16 字节)
3.BMP 信息头(40 字节)
4.调色板(16 色为 64 字节,256 色为 1024 字节)
5.XOR 位图
6.AND 位图
而调色板模式的 bmp 文件的数据结构可分为 4 部分:
1.BMP 文件头(14 字节)
2.BMP 信息头(40 字节)
3.调色板(16 色为 64 字节,256 色为 1024 字节)
4.XOR 位图
分析可知,ico 图标与 bmp 位图有三个相同的部分(注:真彩图标与真彩位图的数据结构
均没有调色板部分,所以是两个相同的部分),而且这三个部分是最重要的部分。因此,我
们只要去掉 bmp 位图的 BMP 文件头,再加上 ICON 文件头、ICON 图象信息块和 AND 位图,就可
以轻松制作出 255×255 象素以内的任何规格的图标了。然而……且慢,有一点却是很不轻松
的:如果你想制作背景透明(屏蔽背景色)的图标,那么你还需要对 XOR 位图的数据动大手
术,更不轻松的是,AND 位图的数据也必须符合相应的要求,这是相当困难的;而制作有背
景色的图标的话,XOR 位图部分我们可以原封不动,AND 位图全是 0,只要计算出它的长度
来即可添加到 XOR 位图数据的后面,这是很容易实现的。所以,下面我所讲的,都是制作有
背景色的图标。
ICON 文件头结构很简单,一共只有 3 个数据共 6 个字节,我们要给其中的“资源类型”和
“图象个数” 2 个数据均赋值为 1。
ICON 图象信息块有 7 个数据共 16 字节,有 5 个数据要赋值:图标宽度、图标高度、颜色
计数、图像数据块的长度、图象数据块相对于文件头部的偏移量。要赋值的 5 个数据中,图
象数据块相对于文件头部的偏移量是固定的,图像数据块的长度需要计算,其余 3 个数据可
从 BMP 信息头中获得资料。
AND 位图的长度必须根据从 BMP 信息头中获得的有关数据计算。
此外,还要更改 BMP 信息头中的 2 个数据:一个是图象长度数据(要加上 AND 位图的
长度),另一个是图像高度数据(这只要简单地将原数据×2 即可)。
OK,一切都准备好了,万事俱备,只欠东风,下面就让东风劲吹吧。
2.编程
新建一个窗体,添加一个公用对话框,两个图片框,三个按纽。
窗体与图片框的 ScaleMode 属性均设为 3,其中 Picture1 的 Autosize 属性设为 Ture。
按纽的属性设置:
Command1:Caption=打开图片
Command2:Caption=数据处理,Enabled=False
Command3:Caption=保存图标,Enabled=False
代码如下: