2013-04-04 57 views
0

我正在做一個Silverlight網站,其中包括油漆般的功能,包括freedraw。爲了達到這個目的,我使用了以下網站上描述的技術:http://codeding.com/articles/freehand-drawing-in-silverlightSilverlight的帆布freedraw表現不佳

的問題是,當我運行演示項目將開始繪製的短短几秒鐘後,極度落後。我意識到這可能是由於這種技術需要的形狀數量造成的,但是,這是我的主要問題:

網站上的演示怎麼沒有滯後多久我畫的是多少,而我的本地項目應該有EXACT相同的代碼馬上離開?

我試圖找到一些關於整體提升帆布的表現,但我發現的唯一的事情是打開繪製成靜態圖像,因爲我使用的撤銷/重做功能,這是不甚理想。

回答

0

添加到Canvas的形狀數量不應該成爲滯後的原因,還必須有其他的東西,比如將圖形轉換爲圖像進行撤銷/重做功能。對於撤消/重做,您可以保存筆觸信息而不是圖像。在每次撤銷/重做操作期間創建存儲圖像將消耗太多內存。

中風只不過是從一開始(mousedown事件)的一組點結束(鼠標鬆開事件),以及一組筆畫形成一個完整的圖畫。您始終可以使用保存的筆觸信息重新創建繪圖(就像您可以使用圖像重新創建一樣)。您可以使用簡單的數據結構,如List<List<Point>>保存完整的圖紙,這是非常有效的內存而不是創建&存儲圖像本身。

+0

謝謝你的前面回答。不幸的是,在我的測試中,我真的沒有做任何事情,只是將示例代碼添加到畫布上。幾秒鐘後,它仍然像地獄一樣落後。 (PS:我目前的撤銷/重做實際上已經是你描述它的方式了) – optimizer 2013-04-10 07:35:29