- PR -

PictureBoxに2D図形を簡便かつ高速に描画したい

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-12-20 15:06
質問1
Graphicsオブジェクト経由でのBitmapクラスへの描画している既存のC#について、
ソースコードを修正せず、ターゲットをWindowsXPからVistaにアップグレードするだけで速くなる可能性はあるでしょうか?
WindowsVistaの新描画エンジンはGPUを積極的に使うそうですが、
BitmapオブジェクトへのGraphicsオブジェクト経由の操作も対象になり得るのでしょうか?

質問2
現在はWindowsXP+.NET Framework2.0がターゲットで下記の[方法1]と[方法2]を組み合わせていますが、
WindowsVista+.NET Framework3.0がターゲットの場合でも[方法1]と[方法2]を組み合わせが最善でしょうか?
それとも、簡便さと描画速度を兼ね備えたより優れた描画方法が提供されるのでしょうか?

質問3
最近話題のWPFはWindowsFormに比べて、どのような点で優れているのでしょうか?
PFWの表現力の柔軟性は理解できますが、WindowsFormの表現力で満足している場合、
メリットが理解できません。

★質問の背景
WindowsFormのPictureBoxにグラフや計器類を描画しています。
グラフも計器類も多数の2D図形(線、四角形、円、楕円、文字等)の組み合わせで表現できるものです。
グラフや計器類は状況の変化に応じてリアルタイムに表示を更新します。
Bitmapクラスを作成し、全ての2D図形が書き込めたらPictureBoxに貼り付けています。
2D図形の書き込みに方法1と方法2を使い分けていますが、それでも
2D図形の書き込みに多くの時間とCPU負荷が消費され、十分な応答性能が出せません。
WindowsXP上では方法1でも方法2でも、結局座標計算にCPU資源が使われてしまいます。

[方法1] Graphicsオブジェクトを使う方法
・対象:文字、円、楕円、斜め線等、座標の計算が複雑なもの
・特徴:簡便だが非常に遅い
[方法2] BitmapDataを直接操作する方法
・対象:四角、横線、縦線等、座標の計算が単純なもの
・特徴:方法1より高速だが座標の計算が煩雑

そこでDirectXを使えばGPUの演算器をより積極的に活用してくれそうなので、DirectX(DirectDraw)も検討しましたが、
習得が難しくて挫折しました。

現在のターゲット環境はWindowsXP+.NET Framework2.0ですが、WindowsVistaおよび.NET Framework3.0の新機能に
有効な解決策が用意されているなら移行しようと考えています。Graphicsオブジェクトと同等程度の手軽さで
DirectXのパワーを引き出す方法があれば理想的です。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2006-12-20 17:52
ちょっと情報が古いけど参考までに・・・
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld01/directxworld01_01.html
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-12-20 18:18
複数の質問はまとめるのではなく別々のスレッドを立ち上げたほうがいいです。
回答がバラバラになってしまって、混乱しますから。

とりあえず、わかるところだけ。と言っても専門家じゃないので正確ではありませんが。
むしろ間違っているところの方が多いかもしれませんが、その時はどなたか訂正していた
だけると助かります。

引用:

質問1
Graphicsオブジェクト経由でのBitmapクラスへの描画している既存のC#について、
ソースコードを修正せず、ターゲットをWindowsXPからVistaにアップグレードするだけで速くなる可能性はあるでしょうか?
WindowsVistaの新描画エンジンはGPUを積極的に使うそうですが、
BitmapオブジェクトへのGraphicsオブジェクト経由の操作も対象になり得るのでしょうか?


速くなる可能性はないと思います。
Vistaの描画エンジンはGPUを積極的に使うと言っても、遅いところを速くしてくれるわ
けではありません。

引用:

質問2
現在はWindowsXP+.NET Framework2.0がターゲットで下記の[方法1]と[方法2]を組み合わせていますが、
WindowsVista+.NET Framework3.0がターゲットの場合でも[方法1]と[方法2]を組み合わせが最善でしょうか?
それとも、簡便さと描画速度を兼ね備えたより優れた描画方法が提供されるのでしょうか?


[方法1]と[方法2]の組み合わせがひろしさんにとって最善なのであれば、それ以上の
描画方法はないと思います。
(上記のようにVistaになったからと言って劇的に速くなるわけではないので)

私であれば、計器類なども動かない背景部分と動的に描画しなくてはいけない部分が
あるとおもうので、背景部を描いたあとで背景用のビットマップとして別途退避しておいて
動的な部分を描画する際に背景部と合成すると思います。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-12-22 20:22
ご回答ありがとうございます。

VistaがDirectXへのハードルを低くしてくれると期待したので少し残念です。
DirectXは専門用語が多くて歯が立ちませんでした。
1

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