ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:36.52KB ,
资源ID:14967804      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14967804.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ico文件的数据结构Word格式.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ico文件的数据结构Word格式.docx

1、的:如果你想制作背景透明(屏蔽背景色)的图标,那么你还需要对 XOR位图的数据动大手术,更不轻松的是,AND 位图的数据也必须符合相应的要求,这是相当困难的;而制作有背景色的图标的话,XOR 位图部分我们可以原封不动,AND 位图全是 0,只要计算出它的长度来即可添加到 XOR位图数据的后面,这是很容易实现的。所以,下面我所讲的,都是制作有背景色的图标。ICON文件头结构很简单,一共只有3个数据共6个字节,我们要给其中的“资源类型”和“图象个数” 2个数据均赋值为 1。ICON 图象信息块有 7个数据共16字节,有5个数据要赋值:图标宽度、图标高度、颜色计数、图像数据块的长度、图象数据块相对于

2、文件头部的偏移量。要赋值的 5个数据中,图象数据块相对于文件头部的偏移量是固定的,图像数据块的长度需要计算,其余 3个数据可从 BMP 信息头中获得资料。AND 位图的长度必须根据从 BMP 信息头中获得的有关数据计算。此外,还要更改 BMP 信息头中的 2个数据:一个是图象长度数据(要加上 AND 位图的长度),另一个是图像高度数据(这只要简单地将原数据2即可)。OK,一切都准备好了,万事俱备,只欠东风,下面就让东风劲吹吧。2.编程新建一个窗体,添加一个公用对话框,两个图片框,三个按纽。窗体与图片框的ScaleMode属性均设为3,其中 Picture1 的 Autosize 属性设为 Tu

3、re。按纽的属性设置:Command1:Caption=打开图片Command2:Caption=数据处理,Enabled=FalseCommand3:Caption=保存图标,Enabled=False代码如下:Option ExplicitDim pDAT() As Byte 源图数据Dim aDAT() As Byte AND位图数据Dim iDAT() As Byte icon文件头和图象信息块数据Private Sub Command2_Click()On Error GoTo 100Dim d As Long, c As LongDim aLength As Long AND位图长

4、度aLength = 4 * (pDAT(4) 32 + Abs(pDAT(4) Mod 32) 0) * pDAT(8) 计算AND位图的长度ReDim aDAT(aLength - 1) As ByteReDim iDAT(21) As Byte给 icon文件头和 icon图象信息块的元素赋值iDAT(2) = 1 资源类型iDAT(4) = 1 图像个数iDAT(6) = pDAT(4) 图像宽iDAT(7) = pDAT(8) 图像高iDAT(8) = 16 * Abs(pDAT(14) = 4)iDAT(18) = 22 图象数据块相对于文件头部的偏移量更改BMP信息头中的图像高度

5、数据d = 2 * pDAT(8)Select Case Len(Hex(d)Case 1, 2: pDAT(8) = dCase 3, 4: pDAT(9) = d 256: pDAT(8) = d And 255End Select更改BMP信息头中的图象长度数据c = pDAT(21): d = pDAT(20) + c * 256 + pDAT(22) * 65536 + aLengthSelect Case Len(Hex(d) pDAT(20) = d pDAT(21) = d 256: pDAT(20) = d And 255Case 5, 6: c = d And 65535:

6、 pDAT(22) = d 65536: pDAT(21) = c 256: pDAT(20) = c And 255计算icon图像信息块中的图象长度数据Select Case pDAT(14) pDAT(14)4为16色,8为256色,24为真彩Case 4: d = d + 40 + 64 64是16色调色板长度,40是BMP信息头的长度Case 8: d = d + 40 + 1024 1024是256色调色板长度Case 24: d = d + 40 iDAT(14) = d iDAT(15) = d 256: iDAT(14) = d And 255 iDAT(16) = d 65

7、536: iDAT(15) = c 256: iDAT(14) = c And 255Command3.Enabled = True: Command2.Enabled = False100End SubPrivate Sub Command1_Click()On Error GoTo ReadErrDim ImageName As String, fLength As Long, BJ As BooleanWith CommonDialog1.DialogTitle = 打开.Filter = 图片文件(*.bmp,*.jpg,*.gif)|*.bmp;*.jpg;*.gif.ShowOpe

8、nIf Len(.FileName) 5 Then Exit SubImageName = .FileNameEnd WithPicture1.Picture = LoadPicture(ImageName)Picture2.Width = Picture1.Width: Picture2.Height = Picture1.HeightPicture2.Picture = LoadPicture()If Right(LCase(ImageName), 3) bmp Then 如果不是位图,先存为位图,再读取BJ = TrueImageName = App.Path &TempFile.bmp

9、SavePicture Picture1.Image, ImageNameEnd IffLength = FileLen(ImageName) 获取文件长度ReDim pDAT(fLength - 15) As ByteOpen ImageName For Binary As #1Get #1, 15, pDATCloseIf BJ Then Kill ImageName 删除临时位图文件If (pDAT(5) + pDAT(6) + pDAT(7) + pDAT(9) + pDAT(10) + pDAT(11) 0) ThenMsgBox 图片尺寸超出Exit SubMe.Caption =

10、 ImageNameCommand2.Enabled = TrueReadErr:Private Sub Command3_Click()On Error GoTo WriteErrDim IconName As String.Flags = &H802保存图标文件(*.ico)|*.ico.ShowSaveIf .FileName = Then Exit SubIconName = .FileNameOpen IconName For Binary As #1Put #1, , iDATPut #1, , pDATPut #1, , aDATReDim iDAT(0)ReDim pDAT(0

11、)ReDim aDAT(0)Command3.Enabled = FalsePicture2.Picture = LoadPicture(IconName)WriteErr:图标制作失败3.代码分析在 Command1_Click 过程中,使用二进制读入数据方法,从第15字节读起,这样就去掉了BMP文件头。在 Command3_Click 过程中,使用二进制写入数据方法,将ICON文件头、ICON图象信息块、读入的位图数据(修改了其中几个字节的数据)、AND位图数据(全0数据)等,依次写入一个ico文件Command2_Click 过程是本代码关键的关键。首先计算 AND位图的长度。这就需要知

12、道扫描线的长度和图象的高度,而计算扫描线长度还需知道图像的宽度。本代码中,图像高度在原位图数据的 pDAT(8)元素中,图象宽度在原位图数据的 pDAT(4) 元素中,所以可归纳成代码中所示的计算公式。接着给 ICON文件头和 ICON图象信息块的元素赋值。请注意 iDAT(6)和 iDAT(7),它们分别是图标的宽度和高度,由于它们都只占用 1个字节,故图标规格的最大值只能做到 255象素(如果它们都分别占用 4 个字节的话,呵呵,那制作出来的图标是多么地惊人啊!)。icon 图像信息块中的图象长度数据元素 iDAT(14)iDAT(17)要最后才赋值。接下来就是更改BMP信息头中的图像高度

13、数据。原元素中只是XOR位图的高度,而图标的数据结构要求这个值是XOR位图高度与AND位图高度之和。再修改 BMP信息头中的图象长度数据。原元素中只是 XOR位图的长度,而图标的数据结构要求这个值是 XOR位图长度与 AND位图长度之和。最后修改 icon 图像信息块中的图象长度数据,也就是 iDAT(14)iDAT(17) 元素的值(这个长度数据本来占用 4个字节,但255255象素的图标长度只要 3个字节就够了)。计算公式如下:icon图像信息块中的图象长度XOR位图长度AND位图长度BMP信息头长度调色板长度特大图标的制作工作到此就全部结束了,你一定迫不及待地想看看它的效果吧,可惜的是,不论多大的图标,在桌面或资源管理器中最大都只能

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1