ちょくちょく、おじゃまさしてもらってます。
通常イラストの描画でマスク画像を用意して
API関数のBitBlt でやっていたのですが、
マスク画像を用意するのが手間なので特定の色(ラベルのバックカラー)を
描画せずに、重ね描きしてマスク代わりにしようと思っています。
そこで、以下のソースですが、
For x% = 0 To XM%
For y% = 0 To YM%
I = Picture1.Point(x%, y%)
If I& <> Label1.BackColor Then
Picture2.PSet (Label1.Left + x%, Label1.Top + y%),I
End If
Next y%
Next x%
PSet、Pointでは、バカ遅です。
PSet、PointをAPIでどう置き換えたらいいでしょうか。
GetPixel,SetPixelが該当しますが
これでも激遅なんですけどね。
二色ビットマップにBitBltするのも手ですが。
後はCreateDIBSectionとかでしょうか。
っていうか、背景が単色なら塗りつぶし系の
APIとかもあったと思うのでそういうのを使ってもいいかも。
塗り残しが発生しそうですが。
自力解決しました。
ネットの海をドンブラコ、やっとたどりつき、
フリーズしまくって、なんとかできました。
CreateDIBSection 関数でDIBSectionをメモリーに確保して
SelectObject関数でオブジェクトを選び、例えばピクチャーボックスとか。
次ぎに、操作する画像をそのピクチャーボックスにBitblt関数でこぴーし、
CopyPtrtoVal関数で、DIBSectionのメモリーデータをバイト配列にコピーします
バイト配列の内容を加減算して、CopyValtoPtr関数でDIBSectionに戻せばいいです。
速度は飛躍的にアップ、コンパイル前の実行速度比較で、
15秒かかっていたものが、10ミリセカンドです。やったー!!!
ツイート | ![]() |