【作业】png文件格式解析


一、文件署名域

8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:

十进制数十六进制数
137 80 78 71 13 10 26 1089 50 4E 47 0D 0A 1A 0A

以一张3*3png文件为例说明:
在这里插入图片描述

二、数据块结构

PNG图像格式文件由一个8字节的PNG文件署名域和按照特定结构组织的3个以上的数据块(chunk)组成。

数据块又分为两种类型,关键数据块和辅助数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们。

数据块的4个域组成如下:
在这里插入图片描述
在这里插入图片描述
框选的第一部分表示chunk长度,十进制是13
框选的第二部分chunk标识,IHDR标识
框选的第三部分是chunk数据部分
框选的第四部分和第五部分是CRC校验码

在这里插入图片描述

结构体如下:

class Chunk
{
public:
    DWORD ChunkLen;//ChunkLen 不算 ChunkLen,Tag,CRC的长度
    DWORD Tag;//4byte
    DWORD CRC;效验码
};
class IHDR : public Chunk
{
public:
    DWORD Width;//宽
    DWORD Height;//高
    BYTE  BitDepth;//位深 真彩色图像:8或16
    BYTE  ColorType;//颜色类型 6:带α通道数据的真彩色图像,8或16
    BYTE  CompressionMethod;//压缩方法(LZ77派生算法) 固定0
    BYTE  FilterMethod;//滤波器方法 固定0
    BYTE  InterlaceMethod;//隔行扫描方法:0:非隔行扫描 1: Adam7(由Adam M.Costello开发的7遍隔行扫描方法)
}

如下图框选部分:
在这里插入图片描述
前八位表示3*3格式,位深是8位,颜色类型2,压缩方法、滤波器方法、隔行扫描方法都是0
在这里插入图片描述

00 00 00 27(16):表示调色板数据长度为39
PLTE:调色板数据块,该数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成。
在这里插入图片描述

在这里插入图片描述
49 44 41 54 :PLTE标识
在这里插入图片描述
上图框选的数据是:
图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
由于数据采用了LZ77派生算法,所以不能直接看出对应的数据。
在这里插入图片描述
F1 6B 03 EA 是CRC校验码
在这里插入图片描述
这是IEND数据块,通常都是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值