自作のプログラムから簡単に画像ファイルを出力したいときは、
PPM(またはPGM/PBM)形式で出力するととても簡単です.

[PPM形式とは?]

PPM形式(Portable PixMap file format) はRGBカラー画像を扱うためのフォーマットで,
「へッダ+画像データの羅列」で表現できます.へッダはテキスト形式,
画像データはテキスト/バイナリを選択でき,非常に簡単です.
もちろんデータ圧縮などはありません.

PGM形式(Portable GrayMap file format) は
同様にグレイスケールの画像を扱うためのフォーマットです.

PBM形式(Portable BitMap file format) も
同様に白黒画像(ビットマップ)を扱うためのフォーマットです.

[フォーマットの解説]

PPM形式は以下の順にデータを並べるだけです.

  1. 文字列"P3".PPM形式を表すための「マジックナンバー」です.
  2. 区切り文字.スペースまたはタブまたは改行です.
  3. 画像の幅.10進数のテキストで出力します.
  4. 区切り文字
  5. 画像の高さ.10進数のテキスト.
  6. 区切り文字
  7. R,G,B値の最大値.10進数のテキスト.
  8. 区切り文字
  9. 画像データ.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が先になります.