轉(zhuǎn):http://blog.csdn.net/gengshenghong/article/details/8648577參考: Netpbm項目主頁: http:///projects/netpbm Netpbm wiki: http://en./wiki/Netpbm Netpbm format wiki: http://en./wiki/Netpbm_format ppm文件格式: http://hi.baidu.com/sunboya198/item/80fb8e16d39ae9098fbde4d6 1. PPM介紹 PPM(Portable PixMap)是portable像素圖片,是有netpbm項目定義的一系列的portable圖片格式中的一個。這些圖片格式都相對比較容易處理,跟平臺無關(guān),所以稱之為portable,簡單理解,就是比較直接的圖片格式,比如PPM,其實就是把每一個點的RGB分別保存起來。所以,PPM格式的文件是沒有壓縮的,相對比較大,但是由于圖片格式簡單,一般作為圖片處理的中間文件(不會丟失文件信息),或者作為簡單的圖片格式保存。 2. PPM格式分析 netpbm的幾種圖片格式是通過其表示的顏色類型來區(qū)別的,PBM是位圖,只有黑色和白色,PGM是灰度圖片,PPM是代表完整的RGB顏色的圖片。 (1) 文件頭 文件頭由三個部分(或者認(rèn)為是四個部分)組成:這幾個部分之間用回車或換行分隔(但是PPM標(biāo)準(zhǔn)中要求是空格) 第一部分是文件magic number: 每一個netpbm圖片由兩個字節(jié)的magic number (ASCII)組成,來標(biāo)識文件的類型(PMB/PGM/PPM)以及文件的編碼(ASCII或binary). 所以PPM格式的起始兩個字節(jié)為P3或者P6. 關(guān)于編碼(ASCII或binary): 其區(qū)別是ASCII編碼的文件是對于閱讀友好的,可以字節(jié)用文本編輯器打開,并讀取其對應(yīng)的圖片的數(shù)據(jù)(比如RGB的值),然后中間會有空格回車等隔開。binary就是按照二進(jìn)制的形式,順序存儲圖片信息,沒有空格回車分隔。所以很顯然,binary格式的圖片處理起來更快(不需要判斷空格回車),而且圖片會更小,但是ASCII閱讀調(diào)試更為直接。 第二部分是圖像寬度和高度(空格隔開),用ASCII表示。 第三部分是描述像素的最大顏色組成,允許描述超過一個字節(jié)(0-255)的顏色值。 另外,在上面的三個部分里面,都可以使用"#"插入注釋,注釋是#到行尾(回車或換行)部分。 (2) 圖像數(shù)據(jù)部分 對于ASCII格式,就是按照RGB的順序排列,以ASCII存儲,并且,RGB中間用空格隔開,圖片每一行用回車隔開。 對于binary格式,就是每一個像素點的RGB值分別順序存儲并且按二進(jìn)制寫入文件(fwrite),沒有任何分隔。 比如下面這個圖片 (一共六個像素點,圖片寬度為3,高度為2):
代碼如下:
測試如下:
|
|
|