實現方式一:
將數據(Point[])根據索引沿X軸使用虛擬畫布進行繪制,每個數據繪制大小為1px * 1px;最終繪制出的寬度等於數據的總長度。標記並存儲當前繪制的圖為PreviousBitmap; 繼續置頂繪制第二組數據,第二組數據繪制完后,將標記的PreviousBitmap作為Image在Y軸距離頂部距離為1px的地方用DrawingContext.DrawImage()方式繪制,以此類推。核心代碼如下:
運行效果
實現方式二:
將數據(Point[])根據索引沿X軸使用虛擬畫布進行繪制,每個數據繪制大小為1px * 1px;最終繪制出的寬度等於數據的總長度。創建一個Rectangle,將繪制的圖賦值給Rectangle.Fill屬性,將繪制過程中不斷創建的Rectangle插入控件Stackpanel的首位。核心代碼如下:
運行效果:
相對而言,方式二由於不斷插入新的Rectangle。下移效果為控件位置變化所呈現,不像方式一是一張完整圖,故畫質欠缺。
性能和測試:
采用Timer生成隨機數據進行測試。10毫秒1組,每組1000個數據點。 相當於每秒繪制10萬個點。
測試時在Release模式下,開啟多個子模塊,性能勉強能接受。
環境:
語言: C#
工程:WPF
工具:Visual Studio 2017
系統:Windows
第三方插件:無
微信掃碼下載源代碼: