- PR -

[VB.NET 2003] オフスクリーンのBitMapの軽量化

1
投稿者投稿内容
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2006-06-18 15:29
複数のオフスクリーンのBitMapを作り、同期スクロールを行っています。

元々のBitMapのサイズが大きいため、スクロールが遅くて困っています。
とりあえず、色数を減らそうと思い、PixelFormat.Format8bppIndexedを指定しましたが、
Graphics.FromImageにて
”インデックス付きのピクセル形式をもつイメージからGraphicsオブジェクトを作成することはできません。”というエラーが発生してしまいます。

何か良い方法がありましたら、ご教授願います。
(色数を減らすことが目的ではなく、BitMapのサイズを小さくすることが目的です)
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-06-18 17:07
引用:

複数のオフスクリーンのBitMapを作り、同期スクロールを行っています。



「同期スクロール」というのが、具体的にどのような処理なのか分かりません。
どんな処理なんですか?

引用:

何か良い方法がありましたら、ご教授願います。
(色数を減らすことが目的ではなく、BitMapのサイズを小さくすることが目的です)



スクロール処理の実装にもよりますが、今時のビデオカードは2Dアクセラレーション搭載が当たり前なので、色数を減らしても描画速度に劇的な速度差が出ることは無いと思います。

「スクロールが遅い」というのが、UI操作への追従が遅いとかそういう系統の話なら、描画処理を適当な時間遅延させるだけでも大分体感的な印象は改善されるはずです。

具体的には、マウス移動のメッセージハンドラで毎回馬鹿正直に再描画を発生させるのではなく、マウス移動のメッセージを受け取ったら適当な長さのタイマを起動し、タイムアウト前に届いたマウス移動のメッセージは記憶するだけで何もしないことにします。タイムアウト時に保存してあったマウスの移動情報に基づいて再描画を行うようにすれば、単位時間当たりの描画回数を削減することが出来、「重い」印象を拭うことが出来ると思います。
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2006-06-19 13:13
回答ありがとうございます。

同期スクロールというのは、複数のパネルを同時にスクロールすることです。

BitMapのサイズを小さくすることはあきらめ、
Paint処理時に、描画処理をとめるようにしました。
これだけで、ずいぶん印象が変わりました。

この様子なら問題がないので、このままにしようと思います。
1

スキルアップ/キャリアアップ(JOB@IT)