PNM のファイル構造 01 ( ヘッダ情報 )

ファイル構造は「ヘッダ部」と「データ部」からなっている。
ヘッダ部は、ファイルヘッダ・情報ヘッダで構成されている。
データ部は、パレットデータ ( ない場合もある )・画像データで構成されている。

 

ファイル構造

1 行目 ファイル形式の指定。P1 など。
2 行目 コメント。# で始める。複数行でも無くともよい。
3 行目 画像のサイズ。横 縦の順にスペースを空けて書く。
4 行目 グレースケール・フルカラー画像の場合は最大値
モノクロだとこの行以降、データとなる。
5 行目 グレースケールおよびカラー画像の場合はデータ

http://tech.ckme.co.jp/pnm.shtml より
f:id:koshinRan:20190218161257p:plain

つまり、以下のような構造になる。
マジックナンバー
空白

空白
高さ
空白
( PPM / PGM ) 最大輝度
( PPM / PGM ) 空白

 

 

3 種類の画像形式をまとめて PNM と呼ぶ

PPM:カラー画像を格納。
PGM:グレースケールを格納。
PBM:モノクロ画像を格納。

アルファチャンネルには対応していない。
PNM を拡張した形式で PAM がある。こちらはアルファチャンネルに対応。

 

特別なツールがなくても読み書き編集ができる「プレーンテキスト」の
画像形式として提唱されたところから始まっている。

つまり、テキストエディタさえあれば読み書き編集が可能な形式。
バイナリで格納するモードも持っている。
このバイナリで格納するモードでも、バイナリなのは画像そのものの領域で、
ヘッダ領域プレーンテキストになっている。

バイナリデータで表示すると以下のようになった。幅 2000 高さ 1000
0123456789ABCDEF
P6.2000 1000 655
35..............
................
................

 

ヘッダ情報

PNM 形式ではテキスト領域のトーク ( 要素 )デリミタ ( 分離記号 )
1 つ以上の空白文字。以下が該当する。

' ' 空白 (space)
'\r' 復帰 (CR)
'\n' 改行 (LF)
'\t' 水平タブ (TAB)
'\v' 垂直タブ (VT)
'\f' 書式送り (FF)

 

輝度値について

輝度の最大値を 10 進数で記述。指定できるのは 1 ~ 65536
二値しか取らない PBM 形式には不要なため存在しない。
RGB 値などの最大値は 8 bit の最大値である 255 だが、
この画像形式では任意の数字を指定できる。
ex ) 9 と書けば 0 ~ 9 の10 階調で表現することができる。

256 以上の数値を指定するとバイナリ形式の場合、各値 2 バイトとして扱われる。
2 バイトの場合ビッグエンディアンインテル系で扱う場合は注意が必要。

 

輝度とデータの境目にある空白について

テキスト形式の場合特に気にする必要はないが、
バイナリ形式の場合は、テキスト形式バイナリ形式境目になるため
注意が必要。

 

バイナリ形式では最後の空白は一つと厳密に決まっている。
多くの場合改行で表現されるのだが、Windows の場合、
テキストモードで改行を出力すると CRLF の 2byte に変換されてしまう。
そのため、プレーンテキストの領域とはいえ
バイナリモードで扱うようにする必要がある。

 

# から始まる行はコメント

テキストの領域であればどこに現れてもよい
ヘッダだけでなく、テキスト形式の場合は画像データ中に現れても
仕様違反ではない。
範囲は # で始まり次の最初の改行 ( \n or \r ) が現れるまでがコメント。
コメントには画像を出力したツールの名前などが書かれていたりする。

 

 

 

こちらから。
https://www.mm2d.net/main/prog/c/image_io-01.html
http://tech.ckme.co.jp/pnm.shtml

以上。