- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分析PNG图像文件结构
接下来应该就是PNG文件的数据块结构了,按照前面对PNG文件结构的分析,第一个数据块应该是文件头数据块(IHDR)数据块,文件头数据块(IHDR)定义了PNG文件的宽高、色深、压缩方法等参数,如图5-19所示。?(点击查看大图)图5-19? 文件头数据块(IHDR)结构分析PNG图像文件结构(2)表5-15归纳了pic1.png图像文件中文件头数据块(IHDR)中各字段的含义。由于PNG文件使用Big-Endian顺序存储数据,所以不需要反转字节数据理解。表5-15?pic1.png图像文件中文件头数据块(IHDR)的各字段含义十六进制值描 述00 00 00 0D文件头的数据长度,00 00 00 0D =1349 48 44 52数据块类型标志,49 48 44 52的ASCII值等于IHDR00 00 00 C8图像的宽度,00 00 00 C8 = 20000 00 00 96图像的高度,00 00 00 96 = 15008色深,表示2的8次幂等于256色0303表示索引图像0000表示使用Deflate压缩编码压缩图像数据0000表示为将来使用更好的压缩方法预留0000表示非隔行扫描AC 02 37 2BAC 02 37 2B表示CRC从表5-14看到pic1.png文件的文件头数据块(IHDR)结构中的CRC字段的值为AC 02 37 2B,这个CRC值是按照从数据块类型标志字段到CRC字段前一字节的数据计算而来的,即使用数据49 48 44 52 00 00 00 C8 00 00 00 96 08 03 00 00 00计算,CRC的计算代码如下: /*8位消息的CRC表格*/unsigned long crc_table[256];/*Flag:CRC表格计算完了吗?初始化 False*/int crc_table_computed = 0;/*写一个CRC表格*/void make_crc_table(void){unsigned long c;int n, k;for (n = 0; n 256; n++) {c = (unsigned long) n;for (k = 0; k 8; k++) {if (c 1)c = 0xedb88320L ^ (c 1);elsec = c 1;}crc_table[n] = c;}crc_table_computed = 1;}/*使用bu[0..len-1]更新CRC表格*/unsigned long update_crc(unsigned long crc, unsigned char *buf,int len){unsigned long c = crc;int n;if (!crc_table_computed)make_crc_table();for (n = 0; n len; n++) {c = crc_table[(c ^ buf[n]) 0xff] ^ (c 8);}return c;}/* 返回 CRC表格buf[0..len-1]. */unsigned long crc(unsigned char *buf, int len){return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL;}main(){/*计算CRC需要的初始化数据,不同的数据块有不同的初始化数据*/unsigned char buf[17] = {0x49,0x48,0x44,0x52,0x00,0x00,0x00,0xC8,0x00,0x00,0x00,0x96,0x08,0x03,0x00,0x00, 0x00 };unsigned long value=0;value= crc(buf,17);}继续分析下面的数据块,PNG图像文件的数据块类型由数据块类型标志决定,按照PNG图像文件中数据块的数据结构分析,接下来的数据块是物理像素尺寸数据块(pHYs),物理像素尺寸数据块(pHYs)指定像素大小或图像的宽和高的比例。表5-16所示为物理像素尺寸数据块(pHYs)中各字段的含义。表5-16?物理像素尺寸数据块(pHYs) 中各字段的含义字 段 名大小(单位:字节)描 述physPixelPerUnitX4每单位多少像素,x轴physPixelPerUnitY4每单位多少像素,y轴UnkownUnit ,Meter1枚举类型,UnkownUnit=0,表示只定义了像素显示的比例,未定义实际像素大小。枚举类型,Meter=1,表示定义单位为米物理像素尺寸数据块(pHYs)的结构可以用以下代码定义:PNG_CHUNK_HEADER chunkHdr ;uint physPixelPerUnitX;uint
文档评论(0)