• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:画像の90度回転表示の処理時間を短縮したい)

画像の90度回転表示を短縮する方法とは?

このQ&Aのポイント
  • PictureBoxに読み込んだ画像を90度回転して別のPictureBoxに表示する処理に時間がかかっている
  • 処理時間を短縮するための方法を教えてください
  • Windows95とVB6.0(SP5)を使用しています

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> どうすればシステムに依存しないで正しく描画できるでしょうか。 しょうがないなあ。VB は嫌いなんだってば :-) No.1 で紹介したソースでは GetBitmapBits() とかって API を使っていた けど、Win16 の遺物なんですね。で、今は GetDIBits() を使え、と。 でも、これって bitmap のフォーマットを知らないと、使うのが厳しいからなあ。 というわけで、microsoft のページを見つけました(→参考URL)。 BitBlt() で、ピクセルを一点一点複写しているのだけれど、API を呼ぶ 回数はほぼ半分だし、質問にあるコードよりは早いことが期待できる。 # かな?

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q186260
holly-tree
質問者

お礼

こんばんは。 またまた参考URLを参照してプロジェクトに組み込んで実行してみました。 No.1のときほど速くならなかったですが、気持ち速くなったのでとりあえずこれで進めてみようと思います。 また時間があるときにでもbitmapについて勉強し、GetDIBits()とかを使ってより高速化に励んでみようと思います。 VB嫌いっておっしゃってるのにしつこく聞いてごめんなさい。 本当にありがとうございました。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

多分、遅い原因は GetPixel() と SetPixel() の呼び過ぎでしょう。 一旦、メモリDC にビットマップの写しを作って、そこで回転させてから、描画するほうが早いと思いますよ。 因みに、私はVBが嫌いなので、細かいことまで示唆できませんので、サンプルを探してみました。 参考URLのページの最後のほうにある "Rotate a picture 90 degrees (7K)" が、先に示唆したような 内容を実現しているようです。 # 安直なところでは、GetPixel/SetPixel をやっている間、Picture を非表示にしておく、という # ことも考えたりしました

参考URL:
http://www.vb-helper.com/howtoadv.htm
holly-tree
質問者

お礼

回答ありがとうございます。 参考URLから教えていただいたサンプルをダウンロードしてプロジェクトに追加し実行したところ、かなりの短縮(3.5秒→1秒)になりました。 しかしここで別の問題が・・・。 ビットマップは256色を使用していて、システムのカラーパレットが256色のときはうまくいくのですが、それ以外の場合は正しく描画できません。 どうすればシステムに依存しないで正しく描画できるでしょうか。 ちょっとインターネットで調べてみたのですがさっぱりわかりませんでした。

関連するQ&A

専門家に質問してみよう