電子書籍の厳選無料作品が豊富!

jpeg画像をPPM形式に変換して、ひらいて読むとP6(フルカラー、バイナリ)になっていました。これをRGBごとに配列を作りたのですがどうすればいいでしょうか?教えて下さい。

A 回答 (2件)

C言語であればサンプルがいくつかネット上で見受けられます.


たとえばhttp://www.mm2d.net/c/c-09.shtmlなど.
先ほどの私の例とは違い,ヘッダを読み込んでから値を1つずつ取ってきています.

他にはヘッダを解析した後に,mallocで画像のサイズ分の領域を確保し,freadを用いて1次元配列に読み込ませる方法があります.
また,ヘッダのサイズや画像のサイズが先に分かっている,固定だという場合には,配列をあらかじめ用意してからfseekとfreadを使うと早いです.

具体的なコードが早くほしいのであれば,上記サイト他ネット上で検索すれば見つかりますよ.
    • good
    • 0
この回答へのお礼

助かりました。ありがとうございました。

お礼日時:2009/08/03 10:36

ヘッダの構造が分かれば,あとはヘッダを飛ばした後,


unsigned char型の配列にいれればよいでしょう

PPMのフォーマットのうち典型的な物をあげると
P6\n
幅(スペース)高さ\n
最大の値\n
RGBRGBRGBRGB・・・
と続きます.
一般的にはR,G,Bは0-255の値が入っています.

実装の言語は何をお使いになるかは知りませんが,
私の場合はRGBをいったん配列(仮にbuffとします)に入れた上で,

R[i*Width+j] = buff[i*Width*3+j*3+0];
G[i*Width+j] = buff[i*Width*3+j*3+1];
B[i*Width+j] = buff[i*Width*3+j*3+2];
のようにそれぞれの配列に入れ直します.
ちなみにiとjは縦方向に何ピクセル目か,jは横方向に何ピクセル目かを表します.(2次元配列の添え字[i][j]を1次元で表してるだけです)
1色はRGBの3色で表すので,×3をしながらアクセスしています.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。言語はCをつかっています。P6はバイナリ形式ですがどのように配列に入れればいいでしょうか?

お礼日時:2009/08/01 16:55

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