1 PNM 介绍
PBM(portable bitmap,可移植位图格式),PGM(portable greymap,可移植灰度图格式),PPM(portable pixmap,可移植像素图格式),三者统称为PNM(Portable any map)。分别为位图,灰度图,像素图,可用ASCII,二进制编码,从P1 到P6 。有头部分和数据部分组成,头部分分三行,第一行表示文件描述子(P1~P6),第二行表示宽高,第三行表述像素取值范围。
如下图所示,图片格式为P4(PBM),0x0A为换行符, 宽为75,高为70。

下表为其中的关系。
|
文件描述子 |
类型 |
编码 |
特点 |
|
P1 |
位图 |
ASCII |
PBM,单色图片,用0,1 的ascii 表示 |
|
P2 |
灰度图 |
ASCII |
PGM |
|
P3 |
像素图 |
ASCII |
PPM |
|
P4 |
位图 |
二进制 |
PBM,单色图片,用0,1 二进制表示,每个byte 表示8个像素 |
|
P5 |
灰度图 |
二进制 |
PGM,灰度图片,每个byte 表示一个像素 |
|
P6 |
像素图 |
二进制 |
PPM,RGB图片,每三个byte表示一个像素 |
2 PNM FFMPEG decode && encode

PNM FFMPEG decode flow 如上图所示,比较简单,其中需要注意的是switch 会根据不同的corlorformat 去设置components,sample_len。 比如RGB24, components = 3,sample_len = 8。 GRAY8,componets =1,sample_len = 8。GRAY16,componets =1,sample_len = 16。

PNM FFMPEG encode flow 如上图所示,也比较简单,其中PNM level 以及宽高信息通过snprintf() 去设置。然后直接拷贝color buff。 相当与在raw buff 前面加一个PNM header。
本文介绍了PNM(Portable Any Map)图像格式的三种类型:PBM、PGM和PPM,包括它们的ASCII和二进制编码方式,以及文件结构。同时,详细阐述了FFMPEG在解码PNM图像时的过程,特别提到根据颜色格式设置components和sample_len。在编码过程中,FFMPEG如何添加PNM头信息并拷贝颜色缓冲区。
3532

被折叠的 条评论
为什么被折叠?



