登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

分析PNG图像文件结构(6)  

2010-07-23 18:01:20|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

5.2.3  分析PNG图像文件结构(6)

图5-26所示为pic1.png中的图像数据块(IDAT)的数据结构。

498)this.style.width=498;" border=0< 
(点击查看大图)图5-26  pic1.png中的图像数据块(IDAT)的数据结构
498)this.style.width=498;" border=0< 
(点击查看大图)图5-26  pic1.png中的图像数据块(IDAT)的数据结构

表5-23所示为pic1.png图像文件中的图像数据块(IDAT)各字段的含义。

表5-23 pic1.png图像文件中图像数据块(IDAT)各字段的含义


十六进制值

描    述

00 00 3D 53

IDAT数据块的长度,00 00 3D 53 = 15699

49 44 41 54

数据块类型标志,49 44 41 54的ASCII值等于IDAT

78~67

图像数据块,一共15699字节,使用变种的LZ77压缩过

0E EE 51 34

CRC值


继续分析下面的数据,按照前面的分析方法,分析出接下来的数据块是图像结束数据(IEND),一般情况下所有PNG图像的图像结束数据(IEND)是一样的,除非自行修改。

图像结束数据(IEND)的结构可以用以下代码定义:

PNG_CHUNK_HEADER chunkHdr;
DWORD idatCrc;
图5-27所示为pic1.png中的图像结束数据(IEND)的数据结构。
498)this.style.width=498;" border=0< 
(点击查看大图)图5-27  pic1.png中的图像结束数据(IEND)的数据结构

表5-24所示为pic1.png图像文件中的图像结束数据(IEND)各字段的含义。

表5-24 pic1.png图像文件中图像结束数据(IEND)各字段的含义


十六进制值

描    述

00 00 00 00

IEND数据块的长度,00 00 00 00 = 0

49 45 4E 44

数据块类型标志,49 45 4E 44的ASCII值等于IEND

AE 42 60 82

CRC值


pic1.png文件格式已经分析完毕,pic2.png的文件格式可以参考上面pic1.png的分析,表5-25显示了pic1.png和pic2.png的文件结构区别。

表5-25 pic1.png和pic2.png的文件结构区别


pic1.png文件结构

pic2.png文件结构

IHDR

IHDR

pHYs

pHYs

iCCP

iCCP

gAMA

gAMA

cHRM

cHRM

PLTE

×

tRNS

×

IDAT

IDAT

IEND

IEND


从表5-24可以看出pic2.png没有PLTE和tRNS数据块,因为pic2.png是16位色图像不需要使用调色板。

PNG图像文件存储的数据块比较多,一般情况每个PNG图像文件的iCCP、gAMA和cHRM数据块中的数据是一样的,只有IHDR和pHYs两个数据块中某些字段数据不同,如图5-28所示。

498)this.style.width=498;" border=0< 
(点击查看大图)图5-28  两张不同的PNG格式图像的区别
498)this.style.width=498;" border=0< 
(点击查看大图)图5-28  两张不同的PNG格式图像的区别

所以很多时候游戏编程人员为了节省游戏资源占用的硬盘空间,去掉了PNG图像文件的某些数据块。如果游戏的资源打包文件包含了PNG图像文件,但去掉了PNG某些数据块,这样对分析游戏资源包文件格式带来了一定的困难,但幸好PNG图像文件的某些数据块还是要保留的,例如图像数据块(IDAT),通过识别某些数据块的标识字符串还是比较容易识别出PNG格式的。
  评论这张
 
阅读(1282)| 评论(1)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018