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。