一般的なデジタル画像処理入門書に掲載されている技法について
お尋ねしたいことがあります。
Bitmap像をヒストグラムを用いて線形濃度変換する処理を
VB6で行っています。
For〜Nextを用いてPoint⇒Psetを繰り返していますが、
処理が遅いのが難点です。
VB2005で同様の処理を行う場合GetPixel⇒DrawEllipse(?)で
行うことになるのでしょうがスピードアップは望めるのでしょうか?
よろしくお願いいたします。
>For〜Nextを用いてPoint⇒Psetを繰り返していますが、
>処理が遅いのが難点です。
VB6.0 でもWin32API のGetPixel と SetPixelV を使って取得・設定するだけでも
数段(4倍程度)早くなりますし、場合によっては違ったやり方をすればもっと
早い処理があるかも知れません。
VB2005 でもWin32API のGetPixel と SetPixelV は使えます。
>VB2005で同様の処理を行う場合GetPixel⇒DrawEllipse(?)で
>行うことになるのでしょうがスピードアップは望めるのでしょうか?
Point⇒Pset の代わりと言うなら、Bitmap クラスの GetPixel メソッド と
SetPixel メソッド になるかと思います。
場合によってはもっと違った処理方法があるかも知れません。
パフォーマンスの公開は禁じられているようなのでできませんが、Point⇒Pset と
比較する事、事態無駄な事なので。
一般的には、GDIで作られたBitmapをそのまま使うのではなく、
自分でDIBデータを確保しておき、その都度API関数の
SetDIBitsToDeviceかStretchDIBitsで描画する、という方法に
なります。
GDIにBitmapの管理を任せるのであれば、CreateDIBSectionを
利用します。
GDI+で行うのならば、適切にLockBitsとUnlockBitsを使っていく
ことになるかと。
ところで、
> パフォーマンスの公開は禁じられているようなのでできませんが、
その禁止も無駄というよりは無意味なことでしょうね。
すばらしいお返事ありがとうございました。
教えていただいた情報を元に勉強していこうと思います!!
GetpixelとSetpixelV、使ってみました。
初めてAPI関数を利用しましたが意外に上手くいって
処理も充分はやくなりました。
DIBデータについても良い記事を見つけました。
何とかやれそうな気がします。
ありがとお (・_;)/〜
ツイート | ![]() |