度々すみません。
StrechBlt を使用して回転ってできませんかね?
1ピクセルづつ書き換えてやる方法が遅くて遅くてたまりません。
なんか速い方法教えてください!!
streachbltとかでは無理そうですねぇ、
でも、こんなのを見つけました。
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips000.htm
20番目に"画像の回転"があります。
PaintPictureでもできるんですね。
でもなんでピクセルごとに書きかえるのが遅くて、
一度に画像を置くのが速いんでしょう?
結局内側では、ピクセルを指定した順に並べるぶんでかわりないはずなのに…。
> 20番目に"画像の回転"があります。
> PaintPictureでもできるんですね。
これと同じ処理はStretchBltでもできますよ。
1ピクセル毎に書き換えて遅くなるのは
コンパイラ(VB)の性能が悪いからでしょう。
アセンブラをうまく使えば単なる転送であればBitBltより高速です。
(BitBltは異なるカラービット間の転送もサポートしてるわけだし
当然といえば当然なんですけど・・・・)
同様に回転の処理が遅いのは回転後の座標を計算するための
処理時間が余計にかかってしまうためです。
これを軽減するための一般的な手法は最も負荷の高い
SinやCosの演算を事前に行っておき、テーブルとして準備する方法です。
これをやるだけでもかなり違ってきます。
一応、確認ですけど1ピクセル毎に書き換えってPointとか
GetPixelとかでやってるわけではないですよね?
GetDIBitsとかで一気に取得し、メモリ上で演算し
ネイティブコンパイルでコンパイルすれば、サイズにもよりますが
まぁ、十分実用に耐えうる速度になるのではないでしょうか。
> 1ピクセル毎に書き換えて遅くなるのは
> コンパイラ(VB)の性能が悪いからでしょう。
> アセンブラをうまく使えば単なる転送であればBitBltより高速です。
そうなんですかぁ、やっぱり実質的にはかわりないんですね、
こういう処理は遅いって、なんだかいろいろなところで見かけるので、
遅いんだなって思っていました。
わたしの疑問は解決です^^;
ありがとうございまーす!!
やってみます!!
ツイート | ![]() |