簡體   English   中英

我是否需要擔心畫布上的最佳繪圖?

[英]Do I need to worry about optimal drawing on canvas?

我要在畫布上繪制一個圖形(由scrollviewer綁定)。 內存中大約有200個節點。

為了簡單起見,我從一個可以自我渲染的usercontrol派生出節點。

但我沒有在節點之間創建線條。 我從MSDN了解到,

在表面上,Geometry類和Shape類非常相似。 兩者都用於2D圖形的渲染,並且都具有從它們派生的類似的具體類,例如,EllipseGeometry和Ellipse。 但是,這兩組課程之間存在重要差異。 首先,Geometry類缺少Shape類的一些功能,例如繪制自身的能力。

因為可能有更多的節點,系統可能會慢慢渲染。 因此,為了提高性能,我覺得最好的選擇是Geometry(自定義渲染)。

我的問題:

  1. 我應該使用Shape或Geometry繪制線條嗎?

  2. 我應該只渲染scrollviewer的當前視口區域以加快顯示速度(在這種情況下我必須將節點從控件轉換為幾何對象),還是應該迭代所有節點並在它們之間繪制線條?

  3. 我應該在位圖上的內存中渲染圖形然后翻轉嗎? 聽起來更像是一般應用程序編程的游戲編程! :d

  4. WPF不會自動處理渲染視圖中的內容以及不能獲得更好性能的內容嗎?

幾點要思考......

從你的主題我得到你不希望節點重繪自己的能力,因為這可能會使它們變慢。 相反,您想要決定何時以及繪制哪個節點。 我對么?

嗯,這看起來不錯,但Canvas從未虛擬化。 我建議通過codeplex網站下載WPFToolkit源代碼。 DataVisualization命名空間下,您有幾個圖表控件(甚至ScatterredChart類似於您的節點之間沒有繪制線條的ScatterredChart)及其源代碼。 觀察他們做了什么。 他們如何提高圖表工具的性能。

我還遇到了關於如何實現Scrollable Virtualized Canvas的技巧 可能這可以幫助您在畫布上實現節點的快速渲染。

親身...

幾何是輕量級的,我喜歡它們。

2] Visual HitTesting可以幫助您了解項目是否在渲染區域下,即在滾動視圖的范圍內。 否則將其隱藏,以便它不會自己繪制。 “隱藏”而不是“崩潰”,因為滾動的表現會很好。

3]我記得我的同事甚至使用具有水平方向的虛擬化堆疊面板,以便渲染節點和單位視圖,即特定於X軸上的一個點的區域,以便這樣的重復區域將自動地配合在一起以產生單片圖形。

很棒的是故障!

一切順利,並告訴我們您的進展情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM