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。