PNM のファイル構造 02 ( 画像データ )

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

 

ヘッダ情報引き続き配置されるのが画像データ
データの格納順は、左上から右側へ走査しながら下に向かう形で格納されている。
また、テキスト形式は 1 行の長さは 70 文字以下であることが推奨されている。
実際には70文字以上あっても読み込んでくれるツールがほとんど。

 

以下、
各ファイル形式ごとの画像形式。
Px はマジックナンバー ( ファイル形式の種別を示す ) 。

 

P1:モノクロ:テキスト

0 が白1 が黒として順にテキストで格納される。
ピクセルの表現に使用される文字は 0 と 1 の 2 種類しかないため、
デリミタとしての空白は必ずしも必要ない。
隙間なく 01 が連なっていてもよいし、間に空白があってもよい。

 

P2:グレースケール:テキスト

指定した最大値までの数値10進数のテキストで順に格納する。
数値の桁数は決まっていないため、数値と数値の間にはデリミタが必要。

 

P3:フルカラー:テキスト

P2 と同様。

 

P4:モノクロ:バイナリ

白黒二値のバイナリ形式。0 が白1 が黒とするが、
1 bit で表現可能なので、上位ビットから順に 1 byte 8 ピクセル分格納する。

ex )「白白白白黒黒黒黒」であれば、0x0F と格納される。
0x0F
8 ビット。2 進数では 0000 1111 。
0x : 16 進数を表わす記号。
0  : 2 桁目は 0
F  : 1 桁目は F
2 進数と 16 進数の対応表確認。

また、画像の幅が 8 の倍数でない場合は、最後の 1 byteに余地が残る
次の行のデータはつめ込まない
幅 4 の画像で「白白白白」次の行が「黒黒黒黒」であれば
0x0f と 1 byte にまとめてしまうのではなく、 0x00, 0xf0 と行ごとに分離する。

 

P5:グレースケール:バイナリ

指定した最大値までの数値を 1 ピクセル 1 byte で順に格納する。

ex )
最大値が 15 ( 2進数:1111 ) だとすると、
1 ピクセルを表現するのに 4 bit あればよく、1 byte に 2 ピクセル分格納できるが、
そのようなことは行われず必ず 1 byte 使用する。
また、
最大値が 256 以上の場合 2 byte 必要になるが、
その場合はビッグエンディアンで格納される。

 

P6:フルカラー:バイナリ

指定した最大値までの数値で、RGB の順1 byte ずつ、
1 ピクセル 3 byte で順に格納する。
P5 と同じで 3 byte 以下で表現できる場合もまとめるようなことは行われない。
また、最大値が 256 以上の場合も同様に
ビッグエンディアンの 2 byte で格納される。

 

 

 

こちらから。
https://www.mm2d.net/main/prog/c/image_io-01.html
https://qiita.com/inabe49/items/805c2d2bcd9e70c37ef6
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1434855909
https://www.mm2d.net/main/prog/c/ ( PNM などの読み書きあり )

以上。