內容均為個人總結,
如果錯誤請告知,并多多見諒,
總的來說繪圖是分為兩個范圍,一是形狀,二是像素填充,
形狀也就是繪制矩形,圓形,復雜組合形狀,
像素填充例如影像填充,但更多是位圖操作,同樣也是可以繪制形狀,不過對于形狀的填充演算法相對很難,是需要獨立進行計算,
在WPF中,對應著分為控制元件繪圖,位圖操作,
對于簡單的繪圖我也不多加復述,通常一般的難點,也就是復雜性繪圖,大規模繪圖等,
一般呢,對于有形狀繪圖有一下方案
1 直接多載OnRender方法并在內使用DrawingContext進行繪圖
2 劫持承載控制元件,并創建繼承DrawingVisual控制元件,并使用RenderOpen方法進行繪制
3 使用GDI+繪圖并配合Bitmap后使用DrawingContext后經行繪圖
通常,方法1,可能使用范圍過小,方法3呢效果不錯,但是放大后效果不好,
所以我們重點說一下方法2
使用方法很簡單,主要是里面繪制的方法,
最好的辦法就是使用DrawGeometry,
但是問題是是提交多個控制元件繪圖對應內容呢? 還是提交一次后內部多次繪制呢?
舉例來說,我之前發的矩形格子,使用的是多次提交,每次提交少量繪制,當繪制大量內容后意味大量提交,大量繪制,雖然單次繪圖很快基本0.2毫秒,但架不住多啊,也就造成卡頓,
所以正確的方法應該是少量提交,內部多次繪制,減少不必要卡頓,
其次,繪圖的方式最好使用streamgeometry,這是真的快,并使用線性背景色,不過使用ImageBrush會是更好的選擇,
例圖 2*2像素的格子,大小是1920*1010,使用的是ImageBrush,同時畫筆凍結等方式,性能也會提交,

一般情況下,大部分是繪制圖表等方式,性能不行其實是可以通過一些方式避免,例如對資料進行處理,歸一化,抽樣等方式,將繪制的東西減少,
還有說的,就是位圖,
一般情況下,WPF2D繪圖最快的就是可寫位圖,真的是快,不論大小,內容還是對顏色上的控制,相對快很多,但是缺點是什么? 是放大后,是需要重新對區域處理,這又是一些其他的開銷,
2D繪圖的使用效果一般很夠用了,
使用順序可以用是 控制元件繪制-可寫位圖,如果這些效果還不好,那就上大招D3Image,因為前面的繪制的東西,使用顯卡效率不高,D3Image是直接Dx所以會高很多,所以效果很好,
相關代碼下載【沒有位圖操作,D3Image等內容,具體使用相對不難,而找到具體使用差距才是本意,后續會補充】
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/206031.html
標籤:.NET技术
下一篇:【MVC5】普通權限+用戶+角色
