2009-09-29 6 views
13

私は現在、パス、楕円などのWPFシェイプをキャンバスに描画するビジュアライゼーションツールを開発しています。私はすでに、Shapesが可視性に応じてその場で破壊され作成される仮想化アプローチを実装しました。しかし、600のような楕円だけが見えても、アプリケーションは苦労しているようです。WPFパフォーマンス:何千ものパス/シェイプをキャンバスに表示

私の選択肢は何ですか?私は透明なビットマップとしてグループ化されたシェイプ(一度に500と言う)をレンダリングし、これらをキャンバスにのみ描画することを考えています。しかし、私はそれは良いアイデアだかどうかわからない...私は、変換が適用された場合、これは、ハックのいくつかの並べ替えを必要と集める何から:

 VisualBrush shapeBrush = new VisualBrush(shape); 

    DrawingVisual drawingVisual = new DrawingVisual(); 
    DrawingContext drawingContext = drawingVisual.RenderOpen(); 

    using (drawingContext) 
    { 
     drawingContext.DrawRectangle(shapeBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight))); 
    } 
    renderTarget.Render(drawingVisual); 

何大きなWritableBitmapを使用してはどうですか?それは別のアプローチですか?

答えて

6

図面の下にあるWPFは、図面とジオメトリで動作します。シェイプを扱っていると言えば、実際のUIElementsですか?そのような要素はかなり重い重量です。基本的な(好ましくはストリーム)ジオメトリを使用して図面を描画すると、私の経験では最高のパフォーマンスが得られます。

私はそのアプローチで合理的なフレームレートで約10000ドットを得ることができましたが、ドットよりも複雑なものは物事を遅くする(丸い点やちょうど長方形など)。それでもできるだけ多くのWPFオーバーヘッドを避けたい場合は、基本的なジオメトリと基本的な描画方法があります。

書き込み可能なビットマップは明らかに最終的に高速ですが、それはすべての形状を自分でレンダリングするか、静的な場合は結果ビットマップをキャッシュすることを意味します。また、レンダリングするビットマップ自体に適用するのではなく、ビットマップにレンダリングする前に変換を適用するのが一般的です。

+0

私は現在、このアプローチを使用しています:パスデータを格納し、境界が可視になるとすぐにWPF System.Windows.Shapes.Pathを返すVirtualPathクラス。 – kitsune

+0

私はStreamGeometryを指摘してくれてありがとうございました。このクラスはまだわかりませんでした。 – kitsune

+1

@kitsune、あなたは「可視になるとすぐにパスを返す仮想パス」を完成させましたか?私は私のプロジェクトの1つでこれを恩恵を受けることができると思う。 –

-1

brute-forceアプローチは、ActiveXコントロールを実装し、Win32を使用してグラフィックを直接レンダリングすることです。しかし、これはややこしいことになります。 QTのキャンバスコントロールは、同じ目的のためにもっと暖かくてふわふわしたアプローチかもしれませんし、このタイプのものをかなり早くレンダリングすることには注意が必要です。 TrollはQTの商用バージョン用のActiveXラッパーを提供しているため、統合が容易です。

+1

これは質問に「WPF」というタグが付いているのはどうですか? – stakx

2

これは古い質問だと私は知っています。私はコミュニティの関心事に答えるだけです。

私はトピックを少し調べました。私が見つけた最高のものは、あなたが言うように手動でDrawingVisualsを作成することです。 WPFには多くの内部作業が保存されるため、処理時間が大幅に短縮されます。私はこのテクニックを使って、数百ポイントの軽量チャートを作成しました。ここで私は自分自身からインスパイアされた記事です、あなたはすでにそれについて知っているかもしれません。

http://blogs.microsoft.co.il/blogs/tamir/archive/2008/03/02/how-to-high-performance-graphics-in-wpf.aspx

EDIT:新しいURL http://khason.net/blog/how-to-high-performance-graphics-in-wpf/
EDIT:新しいURL:http://dedjo.blogspot.com/2008/03/how-to-high-performance-graphics-in-wpf.html

幸運。

関連する問題