【转】分析PNG图像文件结构(6)
来源:互联网 发布:csgo新手设置及优化 编辑:程序博客网 时间:2024/04/27 19:46
在未得到原作者的同意下转载,特地在此贴出源地址以作声明:http://wmnmtm.blog.163.com/blog/static/3824571420106236120342/
--------------------------------华丽的分割线----------------------------
图5-26所示为pic1.png中的图像数据块(IDAT)的数据结构。
查看大图(点击查看大图)图5-26 pic1.png中的图像数据块(IDAT)的数据结构查看大图(点击查看大图)图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)的数据结构。查看大图(点击查看大图)图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所示。
所以很多时候游戏编程人员为了节省游戏资源占用的硬盘空间,去掉了PNG图像文件的某些数据块。如果游戏的资源打包文件包含了PNG图像文件,但去掉了PNG某些数据块,这样对分析游戏资源包文件格式带来了一定的困难,但幸好PNG图像文件的某些数据块还是要保留的,例如图像数据块(IDAT),通过识别某些数据块的标识字符串还是比较容易识别出PNG格式的。
- 【转】分析PNG图像文件结构(6)
- 【转】分析PNG图像文件结构(1)
- 【转】分析PNG图像文件结构(2)
- 【转】分析PNG图像文件结构(3)
- 【转】分析PNG图像文件结构(4)
- 【转】分析PNG图像文件结构(5)
- 分析PNG图像文件结构
- 【转】PNG图像文件存储结构(1)
- 【转】PNG图像文件存储结构(2)
- 【转】PNG图像文件存储结构(3)
- 【转】PNG图像文件存储结构(4)
- PNG图像文件结构解析
- 【转】分析BMP图像文件结构(1)
- 【转】分析BMP图像文件结构(2)
- 【转】分析BMP图像文件结构(3)
- 【转】PNG图像文件介绍
- 【转】BMP图像文件存储结构(1)
- 【转】BMP图像文件存储结构(2)
- Ecplise快捷键
- oracle rollup和cube分析
- 20个常用的Java程序块
- Servlet入门
- 智能指针的原理及实现方案
- 【转】分析PNG图像文件结构(6)
- 类似google动态搜索提示
- Mac OS/Bootcamp上win7截图方法
- 大规模数据处理利器BloomFilter
- 【Poco】Poco::UUIDGenerator的例子
- vs常用快捷键
- SMB 3.0新特性与概述
- 基数+快速排序
- 获取虚函数指针