在未得到原作者的同意下转载,特地在此贴出源地址以作声明:http://wmnmtm.blog.163.com/blog/static/38245714201062355953256/
--------------------------------华丽的分割线----------------------------
表5-19所示为pic1.png图像文件中的gAMA数据块各字段的含义。
表5-19 pic1.png图像文件中的gAMA数据块各字段的含义
十六进制值 | 描 述 |
00 00 00 04 | gAMA数据块的长度,00 00 00 04 = 4 |
67 41 4D 41 | 数据块类型标志,67 41 4D 41的ASCII值等于gAMA |
00 00 B1 8E | gamma校正信息 |
7C F8 51 93 | CRC值 |
继续分析下面的数据,按照前面的分析方法,分析出接下来的数据块是cHRM,cHRM是在设备不能够显示正确的颜色时,使图像尽可能校正颜色的信息,也叫做设备无关的颜色信息。
cHRM数据块的结构可以用以下代码定义:
typedef struct {
uint x;
uint y;
} PNG_POINT;
typedef struct {
PNG_POINT white;
PNG_POINT red;
PNG_POINT green;
PNG_POINT blue;
} PNG_CHRM_CHUNK_DATA;
PNG_CHUNK_HEADER chunkHdr;
PNG_CHRM_CHUNK_DATA chrmChunkData;
DWORD chrmCrc; |
查看大图 |
(点击查看大图)图5-23 pic1.png图像文件中cHRM数据块结构 |
表5-20所示为pic1.png图像文件中的cHRM数据块各字段的含义。
表5-20 pic1.png图像文件中的cHRM数据块各字段的含义
十六进制值 | 描 述 |
00 00 00 20 | cHRM数据块的长度,00 00 00 20 = 32 |
63 48 52 4D | 数据块类型标志,63 48 52 4D的ASCII值等于cHRM |
00 00 7A 25 | 白色点的x轴坐标,00 00 7A 25 = 31269 |
续表
十六进制值 | 描 述 |
00 00 80 83 | 白色点的y轴坐标,00 00 80 83 = 32899 |
00 00 F9 FF | 红x坐标,00 00 F9 FF = 63999 |
00 00 80 E9 | 红y坐标,00 00 80 E9 = 33001 |
00 00 75 30 | 绿x坐标,00 00 75 30 = 30000 |
00 00 EA 60 | 绿y坐标,00 00 EA 60 = 60000 |
00 00 3A 98 | 蓝x坐标,00 00 3A 98 = 15000 |
00 00 17 6F | 蓝x坐标,00 00 17 6F = 5999 |
92 5F C5 46 | CRC值 |
继续分析下面的数据,按照前面的分析方法,分析出接下来的数据块是调色板数据块(PLTE),因为pic1.png是256色图像,所以应该有256个调色板项,每个调色板项占3字节。
调色板数据块(PLTE)的结构可以用以下代码定义:
typedef struct {
BYTE btRed;
BYTE btGreen;
BYTE btBlue;
} PNG_PALETTE_PIXEL;
PNG_CHUNK_HEADER chunkHdr;
PNG_PALETTE_PIXEL plteChunkData[chunkHdr.btChunkLen/3];
DWORD plteCrc; |