自作のプログラムから簡単に画像ファイルを出力したいときは、
PPM(またはPGM/PBM)形式で出力するととても簡単です.
[PPM形式とは?]
PPM形式(Portable PixMap file format) はRGBカラー画像を扱うためのフォーマットで,
「へッダ+画像データの羅列」で表現できます.へッダはテキスト形式,
画像データはテキスト/バイナリを選択でき,非常に簡単です.
もちろんデータ圧縮などはありません.
PGM形式(Portable GrayMap file format) は
同様にグレイスケールの画像を扱うためのフォーマットです.
PBM形式(Portable BitMap file format) も
同様に白黒画像(ビットマップ)を扱うためのフォーマットです.
[フォーマットの解説]
PPM形式は以下の順にデータを並べるだけです.
- 文字列"P3".PPM形式を表すための「マジックナンバー」です.
- 区切り文字.スペースまたはタブまたは改行です.
- 画像の幅.10進数のテキストで出力します.
- 区切り文字
- 画像の高さ.10進数のテキスト.
- 区切り文字
- R,G,B値の最大値.10進数のテキスト.
- 区切り文字
- 画像データ.R,G,Bの順に10進数のテキストで並べます.
もちろん値と値の間には区切り文字が必要.また,1行が70文字を越えてはいけません.
なお,"#“で始まる行はコメントとして扱われます.
PPMにはバイナリ形式もあります.
□ マジックナンバーを"P3"の代わりに"P6"にします.
□ 画像データは10進数のテキストの代わりにバイナリデータ(8bit)を並べます.
もちろん区切り文字は必要ありません.
□ バイナリデータは8bitなので,R,G,Bの値の最大値は255までしかとれません
(テキスト形式だとこの制約はありません).
たとえばテキストPPM形式だと以下のような感じです(‘man ppm’より抜粋).
┌────────────────────────┐
│P3 │
│# feep.ppm │
│4 4 │
│15 │
│ 0 0 0 0 0 0 0 0 0 15 0 15 │
│ 0 0 0 0 15 7 0 0 0 0 0 0 │
│ 0 0 0 0 0 0 0 15 7 0 0 0 │
│15 0 15 0 0 0 0 0 0 0 0 0 │
└────────────────────────┘
PGM形式はPPMのモノクロ版といっていいでしょう.以下に違いを示します.
□ マジックナンバーは"P2”.バイナリ形式の場合は"P5"にします.
□ 画像データは輝度値を順に並べます.
また,PBM形式はビットマップ(白黒)画像用です.
□ マジックナンバーは"P1".バイナリ形式の場合は"P4"にします.
□ 画像データは'0’または'1’を順に並べます.バイナリの場合は8bitで MSBが先になります.