显示ICO图标

      昨天说到了从SD卡加载程序,今天说说Windows下ICO图标的文件格式及显示。最初我想认识图标是为了在读取文件时先显示一个图标加文件名,然后点它一下就打开这个文件,现在图标可以显示了,文本文档也基本可以显示了,但还没有把它们联系起来。有点累了,休息几天再做这事吧,呵呵。
       查了一下现在Windows下的图标基本都是ico格式的,还有早一点的BMP位图格式,参看了网上资料后觉得ico文件是包含BMP位图的,所以这里就直接讲ico图标文件了。先要分清楚ico文件和ico图标,一个ico文件里有好多个图标,有不同大小和颜色,这就是为什么在桌面上能够变化图标的大小,其实只是读取同一文件下的不同数据。任何文件都是以二进制的格式存储的,每一种类型的文件定义了相应的格式,应用软件则按照规定的格式读取文件。
        ICO文件的格式如下(按实际存储的顺序):
        
---------------------------------------------------------------------------- 
        偏移量  字节数  描述               典型值(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    前两字节表示图像数据里调色板数量,后两字节为每像素点在XOR数据中所需的二进制位数
      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字节) 
      4个字节表示一个颜色,若每像素用4个二进制位表示则有16种颜色,此处就是64字节,
     同理若为8位,则有256种颜色,占1024字节
     若为24位或32位真彩色则无此块数据 
 (五、XOR位图的数据)  
     例: 数据扫描的顺序为从左下角开始从左到右,从下到上, 若每像素有8位表示颜色,读到第一个字节时用这个字节的值去索引调色板中的表示颜色的4字节数据为左下角第一个点的颜色值,依此类推。若为真彩色则不用索引,读出数据直接为颜色值。        
 (六、单色AND位图的数据) 
     AND位图的作用是使图标透明,即使图标未使用的区域显示桌面原来的颜色。此数据固定一个二进制位表示一个像素。要注意的是每一行所占的字节数必须为四字节对齐。例如,48*48的图标,一行有48个点,一行则需要占用两个四字节,共8字节的数据,后面不用的位数忽略,白占空间。
      要显示某一点时,先取AND位图中相应点的值与原屏幕值与,再与XOR中值异或。 
     在看程序前,先看实验的照片吧: 
图片

上图是存储在SD卡中的文件,SYS.BIN为程序,用于从SD卡加载到内存中运行,两个图标,另外一个是字库文件和文本文件,下篇日志会用到。 
图片 
上图为程序运行后在开发板上显示的两个图标,照的不是很清晰。 
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值