【转】PNG图像文件存储结构(3)

在未得到原作者的同意下转载,特地在此贴出源地址以作声明:http://wmnmtm.blog.163.com/blog/static/38245714201062355618241/

--------------------------------华丽的分割线----------------------------

下面将讲解在PNG文件中的4个关键数据块(critical chunk)的含义。

① 文件头数据块(IHDR)

文件头数据块(IHDR)它包含有PNG文件中存储的图像数据的基本信息,如图像的宽高、色深、颜色类型、压缩方式等。一个PNG文件只能有一个文件头数据块,表5-13列出了文件头数据块(IHDR)中各字段的含义。

表5-13 文件头数据块(IHDR) 中各字段的含义


字段名

大小(单

位:字节)

描 述

Width

4

图像宽度,以像素为单位

Height

4

图像高度,以像素为单位

Bit depth

1

图像深度:

索引彩色图像:1,2,4或8

灰度图像:1,2,4,8或16

真彩色图像:8或16

ColorType

1

颜色类型:

0:灰度图像,1,2,4,8或16

2:真彩色图像,8或16

3:索引彩色图像,1,2,4或8

4:带α通道数据的灰度图像,8或16

6:带α通道数据的真彩色图像,8或16

Compression

method

1

压缩方法(LZ77变种算法)

Filter method

1

滤波器方法

Interlace

method

1

隔行扫描方法:

0:非隔行扫描

1: Adam7(由Adam M.

Costello开发的7遍隔行扫描方法)


文件头数据块(IHDR)结构可以使用如下代码定义:

typedef struct {
DWORD btChunkLen;
CHAR btChunkType[4];
} PNG_CHUNK_HEADER;
typedef enum  pngColorSpaceType {
GrayScale = 0,
TrueColor = 2,
Indexed = 3,
AlphaGrayScale = 4,
AlphaTrueColor = 6
} PNG_COLOR_SPACE_TYPE;
// Compression Methods
typedef enum   pngCompressionMethod {
Deflate = 0
} PNG_COMPR_METHOD;
// Filter Methods
typedef enum  pngFilterMethod {
AdaptiveFiltering = 0
} PNG_FILTER_METHOD;
// Interlace Methods
typedef enum  pngInterlaceMethod {
NoInterlace = 0,
Adam7Interlace = 1
} PNG_INTERLACE_METHOD;
// IHDR data
typedef struct {
UINT                 width;
UINT                 height;
BYTE                 bit_depth;
PNG_COLOR_SPACE_TYPE color_type;
PNG_COMPR_METHOD     compr_method;
PNG_FILTER_METHOD    filter_method;
PNG_INTERLACE_METHOD interlace_method;
} IHDR_CHUNK_DATA;

② 调色板数据块(PLTE)

PNG的调色板数据块(PLTE)和之前介绍BMP图像格式中的调色板类似,都是提供给8位色深以下的图像使用。PNG的调色板由3个字节组成,每个字节分别表示红、绿、蓝三色的颜色值。

对于PNG图像文件来说,大于8位色深的图像,如真彩色图像也可以使用调色板,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。

一个PNG文件只能有一个调色板数据块,调色板数据块从下标0开始,表5-14列出了调色板数据块(PLTE)中各字段的含义。

表5-14 调色板数据块(PLTE) 中各字段的含义


字 段 名

大小(单

位:字节)

描 述

btRed

1

红色颜色值

btGreen

1

绿色颜色值

btBlue

1

蓝色颜色值


调色板数据块(PLTE)结构可以使用如下代码定义:

typedef struct {
BYTE btRed ;
BYTE btGreen;
BYTE btBlue;
} PNG_PALETTE_PIXEL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值