2010年5月24日 星期一

Silverlight 版本的線上小畫家-存檔

Is it possible to save the Canvas with "children" on the server
Photoshop存檔時,可以選擇儲存成為Photoshop的格式,或是匯出成一般圖片(例如JPEG)。這個概念仍然可以用在線上小畫家,目前我是用Silverlight 3的類別存檔,在畫布上面的物件(例如矩形等)會被結合成為一張圖片,主要的程式碼如下。

WriteableBitmap bitmap = new WriteableBitmap(TracingPaper, null);

可是如果要達到類似Photoshop的功能(圖層疊疊樂),這個方法就不行了,不過方法並不難,主要的方法有二,一是存成XAML格式,不過存檔很不方便,開啟舊檔時也要重新解析,目前我還沒有找到解析的方法,另一是存在資料庫內,這是我決定採用的方法。
讀檔時首先利用雜湊演算法計算出圖片的雜湊值,並且搜尋資料庫是否存在,如果存在則傳回陣列並且動態建立繪圖物件與加上事件,存檔時將幾個必要的屬性值傳回後端儲存,並且刪除之前存在資料庫的屬性,至於屬性的資料列可以設計成(屬性A, 屬性B, 屬性C)或是(屬性名稱, 屬性值)的方式,我採取後者,因為這種方式彈性較大。

存檔資料庫設計畫面


讀檔示意畫面(紅色與藍色框框都會從資料庫中讀出來)