內容均為個人總結。
如果錯誤請告知,並多多見諒。
總的來說繪圖是分為兩個范圍,一是形狀,二是像素填充。
形狀也就是繪制矩形,圓形,復雜組合形狀。
像素填充例如圖像填充,但更多是位圖操作,同樣也是可以繪制形狀,不過對於形狀的填充算法相對很難,是需要獨立進行計算。
在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等內容,具體使用相對不難,而找到具體使用差距才是本意,后續會補充】
