2011年4月16日土曜日

PNM(Portable anymap ファイルフォーマット)の読み取り/編集/保存、BMPへの変換

PNM 画像の読取/編集/保存例です。

PNM(portable anymap ファイルフォーマット)は、pbm(portable bitmap)、pgm(portable graymap)、ppm(portable pixmap)の各画像フォーマットを総称した名前です。
PNM のファイル形式はテキスト/バイナリ形式を選択することにより、メモ帳等でも簡単に編集することが可能です。

その形式には以下の6種類があります。
P1 (PBM) 2値画像 テキスト形式
P2 (PGM) 濃淡画像 テキスト形式
P3 (PPM) カラー画像 テキスト形式
P4 (PBM) 2値画像 バイナリ形式
P5 (PGM) 濃淡画像 バイナリ形式
P6 (PPM) カラー画像 バイナリ形式

P4〜P6 の形式では画像のヘッダ部分を除いた画像データ部をバイナリ形式で出力しなければならないので、メモ帳等での編集は無理ですが、P1〜P3 の形式はテキスト形式で画像の輝度・色情報(R,G,B)を書き込むことができ、メモ帳等で編集することが可能です。

ファイルフォーマットは以下のようなものです。
Pn | → マジックナンバー: P1〜P6
5 5 +--- ヘッダ部 → 横幅 縦幅
5 | → 最大輝度値(PBMでは必要ない)
0 1 0 1 0 |
0 1 0 1 0 |
0 1 0 1 0 +---画像データ部(PBM,PGMの場合)
0 1 0 1 0 | (PPMでは R,G,B の順に記述)
0 1 0 1 0 |

例題では、PGM/PPM 画像の書き出し、PPM 画像の読み込み、編集した画像の BMP への出力を行っています。

ソース等をまとめたもの:DL(PPM 画像含む)

編集や閲覧用のソフトが手近にない場合は、Windows では Susie/Irfanview、OSX/Linux では GIMP2 にてお試しください。

pnm_output.cpp

pnm_lib.h

pnm_lib.cpp
実行結果

処理結果(grayscale.bmp)

処理結果(colorscale.bmp)

処理結果(output.bmp)

0 件のコメント:

コメントを投稿