ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

今、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
...
------
というように、画像データの途中にコメントが挿入されていることはあるのでしょうか?これがなければ、プログラムが簡単に書けるのですが・・・。
わかる人がいれば教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

どこに出現する可能性もあると言ったけど、


さすがにマジックナンバーより前には無いね。
先頭に有ってこそのものだし。


まあ、データの途中にコメント入れるPPM生成ソフトはそうそう無いとは思う。
PPMを読むソフトはデータ部のコメントをちゃんと無視するみたいだけど。
    • good
    • 0
この回答へのお礼

やはりどこにコメントがあっても、使用できるプログラムを作るのが良さそうですね。
回答ありがとうございました。

お礼日時:2009/05/28 22:52

http://netpbm.sourceforge.net/doc/ppm.html
http://netpbm.sourceforge.net/doc/pbm.html
ヘッダに限るなんてどこにも書いてないから
どこに出現する可能性もあると考えるべきでしょう。

#以降を無視するだけなんだから、そんな難しくないよ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

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

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

Aベストアンサー

 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

 PPM/PGM形式は決まったヘッダーとそれに応じた画像をそのまま書き出せば良いので、他の画像形式に比べて簡単ですね。
<PPMバイナリー形式例>
P6  <--- ppmバイナリーを表す
# sample.ppm
237 366
255
.....バイナリー画像データが続く

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

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

・3行目は画像のサイズ(dot)であり,width, heightの順で記述さ...続きを読む

Qc言語 ファイルから数字を読み込む

c言語初心者です。
forループをつかって、
ファイルから空白で区切られた数字を一つずつ読み込む
プログラムを作りたいのですが、
forループの中をどう書いたらいいかわかりません。

#include <stdio.h>

int main (int argc, char *argv[])
{
char *fileName = argv[1];

FILE *fp = fopen("fileName", "r");

int num;
int i;

for(i=0; i<10; i++){
fscanf(fp, "%d", &num);
printf("%d\n", num);
}
fclose(fp);
}

ファイルの内容は、10個の数字が書かれている設定です。

Aベストアンサー

FILE *fp = fopen("fileName", "r");
は、
FILE *fp = fopen(fileName, "r");
でしょうね。
他はいいと思いますが。

細かいことを言うと、argv[1] を参照する前に、argcの値をチェックすべき。


人気Q&Aランキング