プロが教えるわが家の防犯対策術!

タイトルの通り、C言語でppm/pgm形式画像ファイルを作成してみたいのですが、あまりCの知識が身についていないので、どうすればいいのか分かりません。持っているCの入門書には画像描画に関する記述が載ってなくて、ネットで調べても、調べ方が甘いのでしょうか?ppmの構造がなんとなく分かっただけでした。まだまだCの文法の勉強が足りないので勉強中なのですが、どうすればバイナリ形式のppm/pgm形式の画像を作れるようになるでしょうか?ちなみにwindowsでFineViewというソフトで見ようと思っています。

A 回答 (2件)

 PPM/PGM形式は決まったヘッダーとそれに応じた画像をそのまま書き出せば良いので、他の画像形式に比べて簡単ですね。


<PPMバイナリー形式例>
P6  <--- ppmバイナリーを表す
# sample.ppm
237 366
255
.....バイナリー画像データが続く

・1行目はマジックナンバー(識別子)である.
 1行目に"P6"とあればppm(Binary)形式であることを示している.

・2行目はコメント文である.コメント文の前には"#"がついている.

・3行目は画像のサイズ(dot)であり,width, heightの順で記述されている.

・4行目は最大の色調値を表す.P6の場合は普通255と決められている.

・5行目以降は実際の画像データが記述されている.
 各ピクセル値(int)を RGB の順にBinary形式で記述されている.
 つまり画像データ部分は次のようなイメージで表されている.
  231 228 218 215 226 282 …
 つまり,RGBRGBR…表すように並んでいる.

<バイナリー出力>
 形式的には、上記のように簡単なので「Cでどの様にバイナリーファイル出力するか?」が問題のようですね。
 ファイルの出力にはfopen/fprint/putc/fwrite などを使用しますのでその辺の使い方を良く調べれば。。と思います。
http://www9.plala.or.jp/sgwr-t/c/sec17.html

 注意点は、Windowsでfopenする場合、通常はアスキーモードなので勝手に"\n"が挿入されたりしますのでとんでもないことになりますので、バイナリーモードでfopenしてください。
 バイナリーモード例) 
  File *fp = fopen("test.ppm","wb") ;


(PS)
 ppmのフォーマットはASCIIでもバイナリーでも選択できますので、バイナリー出力が不安ならばASCII出力でも良いと思います。ASCII形式ならデータも読みやすいので、最初はお薦めです(近頃のPCならASCIIでもバイナリーでも表示スピードは大して変わらないと思います)

参考URL:http://www.mm2d.net/c/c-10.shtml
    • good
    • 0
この回答へのお礼

ご回答有難うございます。
お察しの通り、PPM形式は非常に簡単ですが、どの様にバイナリファイル出力するかが分かりませんでした。ファイル入出力については自分で勉強するしかありませんね。

お礼日時:2006/05/20 22:31

ppm/pgm のファイル形式がわかっているならバイナリとして書き出すだけです。


fopen("test.ppm","wb")
のようにオープンして
unsigned char でバイトを書き出すような感じでいいと思います。
    • good
    • 1
この回答へのお礼

早速の回答有難うございます。
ただ、案の定よく分かりません。もちろんこれはファイル入出力等を勉強していない自分が悪いのでBLUEPIXY様のせいではありません。実際には画像を作るのはCの勉強がもう少し進んでからにしようと思ってますが、使用している入門書にppmに関する記述が無く、ネットで検索しても実際にバイナリのppmの画像を作っているCのソースがあまり見当たらなかったので、これからどうやって勉強しようかな~と思い質問させて頂きました。

お礼日時:2006/05/20 22:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!