- 締切済み
画像処理
jpeg画像をPPM形式に変換して、ひらいて読むとP6(フルカラー、バイナリ)になっていました。これをRGBごとに配列を作りたのですがどうすればいいでしょうか?教えて下さい。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- exelaurant
- ベストアンサー率100% (1/1)
C言語であればサンプルがいくつかネット上で見受けられます. たとえばhttp://www.mm2d.net/c/c-09.shtmlなど. 先ほどの私の例とは違い,ヘッダを読み込んでから値を1つずつ取ってきています. 他にはヘッダを解析した後に,mallocで画像のサイズ分の領域を確保し,freadを用いて1次元配列に読み込ませる方法があります. また,ヘッダのサイズや画像のサイズが先に分かっている,固定だという場合には,配列をあらかじめ用意してからfseekとfreadを使うと早いです. 具体的なコードが早くほしいのであれば,上記サイト他ネット上で検索すれば見つかりますよ.
- exelaurant
- ベストアンサー率100% (1/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をしながらアクセスしています.
お礼
回答ありがとうございます。言語はCをつかっています。P6はバイナリ形式ですがどのように配列に入れればいいでしょうか?
お礼
助かりました。ありがとうございました。