- ベストアンサー
画像の90度回転表示を短縮する方法とは?
- PictureBoxに読み込んだ画像を90度回転して別のPictureBoxに表示する処理に時間がかかっている
- 処理時間を短縮するための方法を教えてください
- Windows95とVB6.0(SP5)を使用しています
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> どうすればシステムに依存しないで正しく描画できるでしょうか。 しょうがないなあ。VB は嫌いなんだってば :-) No.1 で紹介したソースでは GetBitmapBits() とかって API を使っていた けど、Win16 の遺物なんですね。で、今は GetDIBits() を使え、と。 でも、これって bitmap のフォーマットを知らないと、使うのが厳しいからなあ。 というわけで、microsoft のページを見つけました(→参考URL)。 BitBlt() で、ピクセルを一点一点複写しているのだけれど、API を呼ぶ 回数はほぼ半分だし、質問にあるコードよりは早いことが期待できる。 # かな?
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
多分、遅い原因は GetPixel() と SetPixel() の呼び過ぎでしょう。 一旦、メモリDC にビットマップの写しを作って、そこで回転させてから、描画するほうが早いと思いますよ。 因みに、私はVBが嫌いなので、細かいことまで示唆できませんので、サンプルを探してみました。 参考URLのページの最後のほうにある "Rotate a picture 90 degrees (7K)" が、先に示唆したような 内容を実現しているようです。 # 安直なところでは、GetPixel/SetPixel をやっている間、Picture を非表示にしておく、という # ことも考えたりしました
お礼
回答ありがとうございます。 参考URLから教えていただいたサンプルをダウンロードしてプロジェクトに追加し実行したところ、かなりの短縮(3.5秒→1秒)になりました。 しかしここで別の問題が・・・。 ビットマップは256色を使用していて、システムのカラーパレットが256色のときはうまくいくのですが、それ以外の場合は正しく描画できません。 どうすればシステムに依存しないで正しく描画できるでしょうか。 ちょっとインターネットで調べてみたのですがさっぱりわかりませんでした。
お礼
こんばんは。 またまた参考URLを参照してプロジェクトに組み込んで実行してみました。 No.1のときほど速くならなかったですが、気持ち速くなったのでとりあえずこれで進めてみようと思います。 また時間があるときにでもbitmapについて勉強し、GetDIBits()とかを使ってより高速化に励んでみようと思います。 VB嫌いっておっしゃってるのにしつこく聞いてごめんなさい。 本当にありがとうございました。