Pure_C_Read and Write PPM、PGM、PBM Three Image File Formats

馬衛飛發表於2017-12-20

PPM、PGM、PBM三種都是影象檔案格式

PPM、PGM、PBM三種都是影象檔案格式:
  • PPM->Portable PixMap 支援真彩色圖形,可以讀上面所有格式,輸出PPM圖形
  • PGM->Portable GreyMap 支援灰度圖形,能夠讀PBM圖形和PGM圖形,輸出PGM圖形
  • PBM->Portable BitMap 支援單色圖(1個畫素位)

三種檔案格式結構相同,都非常簡單,沒有壓縮。由表頭和影象資料兩部分組成。表頭資料各項之間用空格(空格鍵、製表鍵、Enter鍵或換行鍵)隔開,表頭由四部分組成:
① 檔案描述子:指明檔案的型別以及影象資料的儲存方式;
② 影象寬度;
③ 影象高度;
④ 最大灰度值或顏色值.


其中影象寬度、高度和最大值這三項是ASCII碼十進位制數. 注意,PBM格式的表頭中最大值隱含為1.
表頭的下面是影象資料區,描述了”寬度×高度”個畫素.影象資料有兩種儲存格式:ASCII和RAWBITS,在檔案描述子中指定
各影象資料之間可用空格隔開.規定每行不超過70個字元.影象資料內容是:
① PBM檔案的影象資料是0和1二值資料,1代表黑色,0代表白色.
② PGM檔案包括的是灰度級資料,0值代表黑色,最大值代表白色.
③ PPM檔案包括的顏色資料,0值代表無此顏色,最大值代表顏色為最大.
檔案描述子 型別 編碼
P1 點陣圖 ASCII
P2 灰度圖 ASCII
P3 畫素圖 ASCII
P4 點陣圖 二進位制
P5 灰度圖 二進位制
P6 畫素圖 二進位制

PPM檔案格式
包括兩個部分,頭部分和圖象資料部分。第一行是P3或P6,說明是PPM 格式;第二行是圖象的寬度和高度,用ASCII來表示;最後一部分是描述畫素的最大顏色組成,這裡允許描述超過一個位元組(0-255)的顏色值。另外可以 在上面三個部分的後面用#來追加註釋,註釋行是從#到該行末。
下面是PPM頭的例子:
例子1:P6 1024 778 255
例子2:P61024 778255
例子3:P6#PPM檔案格式1024 778#寬度和高度# 註釋255
PPM圖象資料的格式依賴於PPM自身的表示,如果是P3格式,資料將以ASCII文字來表示,每個畫素的值從0到前面的最大值,每行不應該長於70個字 符,如例子4:P3# example from the man page4 4150 0 0 0 0 0 0 0 0 15 0 150 0 0 0 15 7 0 0 0 0 0 00 0 0 0 0 0 0 15 7 0 0 015 0 15 0 0 0 0 0 0 0 0 0
如果是P6格式,圖象資料以位元組格式儲存,每個色彩成分(r,g,b)一個位元組。僅僅在頭部的最後一個欄位的前面才能有註釋,在頭部的最後一個欄位後面通常是一個回車或換行。P6圖象檔案比P3檔案小,讀起來更快。注意,P6檔案僅僅用作單位元組彩色。
通常的習慣,圖象從上到下,從左到右被儲存。每個畫素以一個位元組來儲存,0表示黑色,255表示白色。色彩成分按照通常的紅-綠-藍順序來儲存。
PGM檔案格式
該格式檔案儲存灰度圖形,也就是這裡每個畫素使用一個值來表示而不是3個(R,G,B)。同PPM唯一不同的是頭部用P2和P5,分別表示用ASCII和 位元組碼來表示資料。例如:P224 7150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 00 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 00 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 00 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 00 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PBM檔案格式
使用ASCII的0或1方式來表示資料,0表示白色,1表示黑色。與PPM、PGM不同的頭部是少了第三行,因為第三行的最大色彩值在這個模式下已經沒有 意義了。舉例如下:P1# PBM example24 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 00 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 00 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 00 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 00 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

相關文章