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 などの読み書きあり )
以上。