• 締切済み

画像処理

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

みんなの回答

回答No.2

C言語であればサンプルがいくつかネット上で見受けられます. たとえばhttp://www.mm2d.net/c/c-09.shtmlなど. 先ほどの私の例とは違い,ヘッダを読み込んでから値を1つずつ取ってきています. 他にはヘッダを解析した後に,mallocで画像のサイズ分の領域を確保し,freadを用いて1次元配列に読み込ませる方法があります. また,ヘッダのサイズや画像のサイズが先に分かっている,固定だという場合には,配列をあらかじめ用意してからfseekとfreadを使うと早いです. 具体的なコードが早くほしいのであれば,上記サイト他ネット上で検索すれば見つかりますよ.

dkjfpsojfp
質問者

お礼

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

回答No.1

ヘッダの構造が分かれば,あとはヘッダを飛ばした後, 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をしながらアクセスしています.

dkjfpsojfp
質問者

お礼

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