VB2005の点描画は遅い?

解決


もりりん  2007-02-02 08:13:32  No: 135113

一般的なデジタル画像処理入門書に掲載されている技法について
お尋ねしたいことがあります。
Bitmap像をヒストグラムを用いて線形濃度変換する処理を
VB6で行っています。
For〜Nextを用いてPoint⇒Psetを繰り返していますが、
処理が遅いのが難点です。

VB2005で同様の処理を行う場合GetPixel⇒DrawEllipse(?)で
行うことになるのでしょうがスピードアップは望めるのでしょうか?

よろしくお願いいたします。


VBレスキュー(花ちゃん)  URL  2007-02-02 16:57:28  No: 135114

>For〜Nextを用いてPoint⇒Psetを繰り返していますが、
>処理が遅いのが難点です。

VB6.0 でもWin32API のGetPixel と SetPixelV を使って取得・設定するだけでも
数段(4倍程度)早くなりますし、場合によっては違ったやり方をすればもっと
早い処理があるかも知れません。

VB2005 でもWin32API のGetPixel と SetPixelV は使えます。

>VB2005で同様の処理を行う場合GetPixel⇒DrawEllipse(?)で
>行うことになるのでしょうがスピードアップは望めるのでしょうか?

Point⇒Pset の代わりと言うなら、Bitmap クラスの GetPixel メソッド  と
SetPixel メソッド になるかと思います。
場合によってはもっと違った処理方法があるかも知れません。

パフォーマンスの公開は禁じられているようなのでできませんが、Point⇒Pset と
比較する事、事態無駄な事なので。


K.J.K.  2007-02-02 19:03:43  No: 135115

一般的には、GDIで作られたBitmapをそのまま使うのではなく、
自分でDIBデータを確保しておき、その都度API関数の
SetDIBitsToDeviceかStretchDIBitsで描画する、という方法に
なります。

GDIにBitmapの管理を任せるのであれば、CreateDIBSectionを
利用します。

GDI+で行うのならば、適切にLockBitsとUnlockBitsを使っていく
ことになるかと。

ところで、
> パフォーマンスの公開は禁じられているようなのでできませんが、
その禁止も無駄というよりは無意味なことでしょうね。


もりりん  2007-02-03 03:42:01  No: 135116

すばらしいお返事ありがとうございました。
教えていただいた情報を元に勉強していこうと思います!!


もりりん  2007-02-05 00:17:23  No: 135117

GetpixelとSetpixelV、使ってみました。
初めてAPI関数を利用しましたが意外に上手くいって
処理も充分はやくなりました。

DIBデータについても良い記事を見つけました。
何とかやれそうな気がします。

ありがとお  (・_;)/〜


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加