画像の回転ってどうやるんでうしょうか?

解決


VB初診者  2002-05-31 21:50:01  No: 104327

度々すみません。
StrechBlt を使用して回転ってできませんかね?

1ピクセルづつ書き換えてやる方法が遅くて遅くてたまりません。

なんか速い方法教えてください!!


たかみちえ  URL  2002-05-31 23:14:01  No: 104328

streachbltとかでは無理そうですねぇ、
でも、こんなのを見つけました。
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips000.htm
20番目に"画像の回転"があります。
PaintPictureでもできるんですね。

  でもなんでピクセルごとに書きかえるのが遅くて、
一度に画像を置くのが速いんでしょう?
結局内側では、ピクセルを指定した順に並べるぶんでかわりないはずなのに…。


こころ  URL  2002-06-01 04:46:42  No: 104329

> 20番目に"画像の回転"があります。
> PaintPictureでもできるんですね。
これと同じ処理はStretchBltでもできますよ。

1ピクセル毎に書き換えて遅くなるのは
コンパイラ(VB)の性能が悪いからでしょう。
アセンブラをうまく使えば単なる転送であればBitBltより高速です。
(BitBltは異なるカラービット間の転送もサポートしてるわけだし
  当然といえば当然なんですけど・・・・)

同様に回転の処理が遅いのは回転後の座標を計算するための
処理時間が余計にかかってしまうためです。
これを軽減するための一般的な手法は最も負荷の高い
SinやCosの演算を事前に行っておき、テーブルとして準備する方法です。
これをやるだけでもかなり違ってきます。

一応、確認ですけど1ピクセル毎に書き換えってPointとか
GetPixelとかでやってるわけではないですよね?
GetDIBitsとかで一気に取得し、メモリ上で演算し
ネイティブコンパイルでコンパイルすれば、サイズにもよりますが
まぁ、十分実用に耐えうる速度になるのではないでしょうか。


たかみちえ  URL  2002-06-01 06:16:32  No: 104330

> 1ピクセル毎に書き換えて遅くなるのは
> コンパイラ(VB)の性能が悪いからでしょう。
> アセンブラをうまく使えば単なる転送であればBitBltより高速です。
  そうなんですかぁ、やっぱり実質的にはかわりないんですね、
こういう処理は遅いって、なんだかいろいろなところで見かけるので、
遅いんだなって思っていました。
わたしの疑問は解決です^^;


VB初心者  2002-06-04 20:55:18  No: 104331

ありがとうございまーす!!

やってみます!!


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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