目次 >> PNM画像の作成
ここでは画像フォーマットPPM、PGM、PBM(まとめてPNM称される)の作成方法について記述する。
PNMは構造が非常に単純で、しかもテキスト形式(ASCII形式ともいう)でもバイナリ形式でも記述できる。そのため、プログラム内から画像を作成する場合にライブラリなどなしでどのプラットフォームでも簡単に作成できる。
欠点は圧縮されていないため、BMPファイルなどと同様ファイルサイズが大きくなってしまうことである。
一般的には、まずプログラム内では、PNMで作成して、そこからImageMagickなどを呼び出して、他の形式に変換して圧縮すると良い。
白黒のPBM(portable bitmap format)、グレースケールのPGM(portable graymap format)、フルカラーのPPM(portable
pixmap format)がある。
拡張子はそれぞれ.pbm、.pgm、.ppmである。
この画像形式は多くのファイルビューアが対応している。例えば
IrfanView
GIMP
などが代表的なところである。
テキスト形式であれバイナリ形式であれ、データ行直前の行までは両形式とも同じ様にテキスト形式で記述する。
ファイル形式の指定
P1:テキスト形式の白黒画像
P2:テキスト形式のグレースケール画像
P3:テキスト形式のフルカラー画像
P4:バイナリ形式の白黒画像
P5:バイナリ形式のグレースケール画像
P6:バイナリ形式のフルカラー画像
コメント
#で始める。
画像のサイズ。
横 縦の順にスペースを空けて書く。
最大値
指定できるのは1~65536
ただし、256以上の数値を指定すると、バイナリ形式の場合、各値2バイトとして扱われる。2バイトの場合、ビッグエンディアンなのでインテル系で扱う場合は注意が必要である。
白黒画像の場合はこの行以降データ。
テキスト形式の場合、改行の位置は関係なく、また一行あたりホワイトスペースを入れて70文字までに納める(ただし大抵のソフトではこれを超えても読み込めるようである)。
グレースケールおよびカラー画像の場合はデータ。
テキスト形式の場合、改行の位置は関係なく、また一行あたりホワイトスペースを入れて70文字までに納める(ただし大抵のソフトではこれを超えても読み込めるようである)。
テキスト形式の場合、0、1で記述する。0が白で1が黒である(これは他の形式が0が黒になるのと逆である)。
間に入れるスペースは2つ以上入れても良い。
テキスト形式の場合、一行あたりホワイトスペースを入れて70文字まで(ただし大抵のソフトではこれを超えても読み込めるようである)。
例
P1 # PBM test 10 4 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
例2、複数行のコメント
P1 # PBM test # PBM test 2nd line 10 4 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
例3、コメントなし
P1 10 4 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
このまま、テキスト形式で保存し、拡張子をpbmにすれば、画像ビューアで開くことができる。
配列int b[x][y]に保存された白黒画像(bの値は0か1)をテキスト形式で保存するプログラム例は
のようになる。
PBM形式の場合、バイナリ形式は1ビット1ピクセルであるので少し大変であるが、ファイルサイズはかなり圧縮できる。
配列int bitmap[x][y]に保存された白黒画像(bitmapの値は0か1)をバイナリ形式で保存するプログラム例は
プログラム例
0から[最大値]の間で記述する。
[最大値]のとれる最大値は65536である。
0が黒で[最大値]が白になる。
各値の間に入れるスペースは2つ以上入れても良い。
テキスト形式の場合、一行あたりホワイトスペースを入れて70文字まで(ただし大抵のソフトではこれを超えても読み込めるようである)。
例、上記白黒と同じ画像
P2 # PGM test 10 4 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 255 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255
例2、最大値を15に
P2 # PGM test 10 4 15 15 15 15 15 15 15 15 15 15 15 15 15 0 0 0 0 0 15 15 15 15 15 15 15 15 15 0 15 15 15 15 15 15 15 15 15 15 15 15 15
例3、最大値を1にすると、PPMの白黒を逆にしたものとなる。
P2 # PGM test 10 4 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
例4、グラデーション、最大値は9
P2 # PGM test 10 4 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
プログラム例
配列int bitmap[x][y]に保存されたグレースケール画像(bitmapの値は0から[最大値])をテキスト形式で保存するプログラム例は
のようになる。
RGBの順で記述し、3つで1ピクセルを表す。
各値の間に入れるスペースは2つ以上入れても良い。
テキスト形式の場合、一行あたりホワイトスペースを入れて70文字まで(ただし大抵のソフトではこれを超えても読み込めるようである)。
例
プログラム例
配列int r[x][y]、int g[x][y]、int b[x][y]に保存されたRGB画像(各値は0から[最大値])をテキスト形式で保存するプログラム例は
のようになる。
最終更新日