• ベストアンサー

C言語でのppmファイル作成

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

質問者が選んだベストアンサー

  • ベストアンサー
  • amru05
  • ベストアンサー率63% (33/52)
回答No.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
magurou
質問者

お礼

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

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ppm/pgm のファイル形式がわかっているならバイナリとして書き出すだけです。 fopen("test.ppm","wb") のようにオープンして unsigned char でバイトを書き出すような感じでいいと思います。

magurou
質問者

お礼

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

関連するQ&A

  • ppm形式の画像のファイルフォーマットについて

    今、C言語でppmのP3形式の画像を書き換えるプログラムを作成しています。そこで、ppm形式の画像についての質問があります。 ppm形式では、#以降の記述はコメントとして読みとばすという決まりがありますが、これはヘッダ以外にも記述されるのでしょうか?例えば、 ------ P3 150 250 100 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 #~~~ 15 15 15 15 15 15 15 15 15 ... ------ というように、画像データの途中にコメントが挿入されていることはあるのでしょうか?これがなければ、プログラムが簡単に書けるのですが・・・。 わかる人がいれば教えてください。よろしくお願いします。

  • C言語 画像処理 jpeg → pgm

    C言語 ( visual studio 2010 ) を使っております。 今回C言語で画像処理を行いたいです。 使用目的としましては、実際にデジカメでとった写真について使いたいのですが、デジカメで撮った写真はjpeg形式の為、これをpgm形式に変換したいのです。 しかし、プログラミング経験がほとんど無いため、どのようなプログラミングを作成してよいのか解りません。 一応、新版 明解C言語 入門編(出版社: ソフトバンククリエイティブ)は読んだのですが、作成できませんでした。 お教えいただけないでしょうか。 よろしくお願い致します。

  • C言語の質問です

    http://www1.axfc.net/uploader/Sc/so/74915.c このppmからpgmにグレースケール化するプログラムをppmからppmのグレースケール化のプログラムに書き換えたのですができた画像を開こうとすると途中で処理が終わっているとエラーメッセージでてグレースケール化した画像が三枚並んでいる画像が出ます。修正箇所があれば教えてください。 ちなみに作ったプログラムは上のプログラムからPGMの部分を消してppmに書き換えています。 またグレースケール化の方法は 重み付けした輝度の計算で処理したいと思っています。こちらの修正もお願いします (0.299 * R + 0.587 * G + 0.114 * B)

  • C言語で画像処理

    C言語で画像処理をしたいのですが、元となる画像の形式は何がよいのでしょうか?BMP,GIF,JPEG,PNG,などいろいろな形式がありますよね。一般的には画像処理プログラミングをするときに、どの形式の画像を用いるのでしょうか? また、その画像の読み込み方がわかりません。C言語は入門書を一通りやってみた程度で、画像処理のプログラミングの仕方がわかりません。 初心者なものでよろしくお願いします。

  • C言語での画像処理:jpeg→pgmへ

    Linux(Fedora core 4)を使っております。 今回C言語で画像処理を行いたいと考え、画像の形式がpgm形式としてのプログラムを組みました。 このプログラムを、実際にデジカメでとった写真について使いたいのですが、デジカメで撮った写真はjpeg形式の為、これをpgm形式に変換したいのですが、これはプログラムを作って行うことはできるのでしょうか。もしくはツールが必要なのでしょうか。ちなみに当方プログラミング初心者でございます。 よろしくお願い致します。

  • C言語の完全入門を買ったはいいが。。。

    言語を覚えようと思って、なんか適当にC言語の完全入門とかいうのを買ってしまいました。こちらの過去の質問を見たところ、C++の方がよさそうなことも書いていたのでちょっとショックです。 まだはじめたてなので、今からC++に変えようかなと思ったりもしていますが、このままCの勉強を続けても問題ないでしょうか?せっかく買ったからもったいないようにも思えて。。。 あまり目的はないのですが、とりあえずはじめてみようと思ったことなのですが。。 あと、まだ数ページしか見ていませんが、それより前に、アセンブラとか実行の方法とかの本もまずありました。 (というのも本のシリーズでC入門は第2巻で第1巻はそのような本が載っていましたもので。。。) てっきり入門だからこれが最初だと思ったので買ったのですが、一番の入門はその実行とかの方ですかね? 昔にFortranをかじったぐらいで知識は薄れてしまっているのですが。。。 よろしくお願いします。

  • C言語の使い方

    情報系の大学への進学を考えている高校生です。 情報系ということで、やはりプログラミングができた方がよいと思ったので、C言語の入門書を買い、独学で勉強しているのですが、この本に載っているのはすべて足し算の結果や条件によって異なった文字列をコマンドプロンプトに表示させたりするだけで、この行為をどう応用させれば実用的なプログラムになるのかわかりません。 ウイルスもプログラムですよね?作りたいわけではありませんが、自分が今やっていることとはまったく関係のないことのように思えるのです。 そこがわかっていないと勉強する意欲も出ませんし(言い訳?)それにそこをわかった上で勉強するほうがたのしいでしょうから。 答えにくい質問であることはわかっていますが、どうかお答えください。何か間違った記述があれば指摘してください。それも勉強のひとつですから。 それからついでになにかプログラミングに関するお話をしていただければうれしいです。なんでもかまいません。できるだけたくさんの予備知識がほしいのです。よろしくお願いします。

  • C言語について

     プログラミング言語について質問があります。今、C言語を練習中ですが、C言語に関する本を見ると、大体、(入門者用の教科書しか知らないのですが)ファイル操作とか、構造体とかの説明とかで、終わっています。それで、自分はWindowsでグラフィック操作(例:動画とかを扱う)とかの、プログラムを組みたいのですが、C言語でそれができるのでしょうか。それともC++言語とか、Javaとか他の言語を習得しなければいけないのでしょうか。また、欲張りますが、C言語でグラフィック操作ができるのなら、どんな本を読めばいいのでしょうか。解らなかったので、投稿しました。よろしければ、回答宜しくお願いします。

  • C言語かBasic言語

    プログラミングにチャレンジしようとしている者です。 初心者のため、C言語かBasic言語どちらを勉強していけばいいのかわかりません。 また、最終的には自分でアプリケーションを作ってみたい、と思っています。(ブラウザなど) そこで、「これなら初心者でもチャレンジできる!」という言語を教えていただきたいのです。 できればわかりやすい本などもありましたら教えてください。(入門書など) よろしくお願いします。

  • C言語について知りたい!!

    C言語を勉強しようと思ったのですが、 C言語って数学ができないとヤッパリ上達しないのでしないのでしょうか??それとも、別に数学はできなくてもC言語の知識をつける事は可能なのでしょうか?? C言語を勉強する上で必要になってくる数学って一体何でしょうか?? 関数とかでしょうか?? 必要になってくる数学の知識について教えてください! よろしくお願いしますm(_ _)m

専門家に質問してみよう