• 締切済み

ビットマップの画像処理について自由度を得る最適方法

以下、長文かつ具体性に欠ける質問で済みません。画像処理についてやりたいことは決まっているのですが、やり方がわからなくて長年困っています。 【やりたいこと】:ビットマップ形式による写真画像があります。その画像上に例えば、何らかのデータに基づいて線を引いたり、写真画像を数値化して計測したり、自由に加工したりするものです。そのためにはビットマップファイルを自由に操作出来なければなりません。 【これまでにやったこと】 ○Windows VC++ 6.0, Borland C++, Visual Basicなどの勉強 WindowsAPIなど。 ○既成ソフトでの操作(Adobe系,ImageMagik,など) ○科学技術系ソフト(Matlab, Octaveなど) どれも何となくイメージと違うのです。画像ファイルというのはバイナリで、ヘッダ部とデータがあり、(500×500)などの2次元ラスターファイルに過ぎないと私は考えています(色もあるのでさらにそれが何枚かあるのかも知れませんが、基本構造は同じ?)。WindowsAPIなど勉強していると難しいクラスの説明ばかりですが、もっと簡単に処理できるだろうと思っています。画像処理ソフトでは、感覚に頼って見た目に応じてマウスで処理するので正確ではありません。どうしても数値のデータとして処理したいのです。 テキストとして取り出されたビットマップファイル(500×500)の処理はループを回してアレコレ処理すればよい(自由度無限大、だからいろいろあって難しいが)わけですね。要するにビットマップファイルを数値データとして自由に読み書きできるスキルを最も最速で習得するにはどうしたらよいかということなのです。 前提となる画像フォーマットはWindows Bitmapです。そうでないものはペイントショップなどで(質はともかく)変換できるので、その問題はクリアしています。 やはり、WindowsAPIの勉強が不可欠なのでしょうか。 プログラムのスキルとしてはFortranによる科学技術計算プログラムを10年以上作成しています。Fortran95ぐらいだったらポインタなどもあるようなのでビットマップのエディットはひょっとしたら簡単なのかも知れませんが。 以上、長文で失礼します。よろしくお願いします。

みんなの回答

  • monova
  • ベストアンサー率68% (68/100)
回答No.3

No.1です。 ベタなC言語でバイナリファイルへのアクセス方法を解説したページです。 http://itpro.nikkeibp.co.jp/article/COLUMN/20061215/257060/ 詳しく見ていないので的を射た内容かは今ひとつ自信がないですが…(^_^;

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

Matlab、Octaveでいいんでは。 imread一発で、各ピクセルの数値データの行列が得られますが。 http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/imread.shtml

  • monova
  • ベストアンサー率68% (68/100)
回答No.1

どの様に回答したら良いのか、今ひとつ、質問の主旨が きちんと読み取れなくて申し訳ないのですが… 質問文に書かれている様に、それだけご理解出来ているの なら既にご存じなのかもしれませんが、 BITMAPのファイルフォーマットはこんな感じになっています。 http://kuwalab.net/technics/bitmap/index.html ヘッダに、BITMAP ファイルの情報が書かれていて、 データ部分にはRGBの値が16進数で書かれています。 これらを、バイナリで展開すれば思い通りにさわれると 思います。 たとえば、C++Builder でしたら、TMemoryStream などを 使って、読み込めば1byteずつ、自由に触れます。 VisualC++ 系でしたら、 CFile::Read か ReadFile で 読み込んで、ポインタを使って1byteずつ触れば 良いのでは無いでしょうか? 特にAPIを知らなくても大丈夫だとは思いますが、 仕様によっては、楽にアクセス出来たりするかも しれません。

skmsk19410
質問者

お礼

有難うございました。 どこかにサンプルプログラムがないでしょうか。 ○読み込み 読み込んでピクセル情報を整数として取り出す。 ○書き込み 新しいファイルを開いてヘッダとピクセル情報を書き出して新しいビットマップファイルが出来る。 あるビットマップファイルを読み込んで、全く別のファイルに同じものを書き出すことができれば所期の目的は完了です。 VC++, C++Builderなどに依存することなく、普通のCで処理できるような形だと有難いのですが。よろしくお願いします。

関連するQ&A