目錄
最近空餘時間研究了一下Win2D,它能為我們在UWP中提供一種類似GDI那樣的繪圖方法。就像傳統Winform、MFC中那樣重寫OnPaint相關的方法,然後呼叫DrawLine繪製一條直線。有了它的幫助,我們可以在UWP中建立複雜的UI,聽起來是不是很爽呢?
本文原始碼地址:https://github.com/sherlockchou86/ImageEditor.UWP
主要功能已經完成,主要包括:
- edit local and remote(net) images;
- select layout(1:1 3:4 4:3), select backcolor for canvas, rotate and crop the background image;
- tune brightness, degree of fuzzy and degree of sharpening;
- add stickers onto canvas(download templates from internet);
- apply a kind of filters(8 filters supported);
- add tags such as location, @friends, adn etc;
- draw on the canvas, you can select pen-size, pen-color(image) which you like;
- save the canvas as a
BitmapImage
object, which you can directly use.
Note:
- 貼紙是根據自定義的json檔案,自動從網上下載的。也就是說,貼紙不是固定不變的,你可以隨時修改json檔案,隨時更新貼紙模板。詳細json格式參見下面;
- 原始碼中我並沒有建立單獨的Library,你如果需要封裝成獨立的庫,只需要建立一個Library Project,然後將'Controls', 'DrawingObjects', 'Images', 'Resources' and 'Tools' 目錄拷貝到新建的Project中去即可,注意必要時需要修改NS。
下面是下載貼紙的json檔案範例:
其實原理相當簡單,熟悉gdi繪圖的人很容易理解:
- 繪製直線
graphics.DrawLine((float)Left, (float)(Top + (Height / 3)), (float)(Left + Width), (float)(Top + Height / 3), Colors.Orange, 0.3f, style);
- 填充圓形
graphics.FillCircle((float)Left, (float)Top, radius, DrawColor);
- 關於濾鏡效果
Win2D中有現成的濾鏡類,只需要傳入Image,設定相關屬性,那麼返回來的便是濾鏡效果。每種效果都是一個ICanvasImage,直接將其Draw在UI上或者一個CanvasBitmap上即可。
- 關於程式碼結構
可以看到,程式碼中建立了許多的DrawingObject型別,熟悉gdi的童鞋們相比已經知道什麼情況了。
關於控制元件的使用方法,就更簡單了。參見下面程式碼:
分三步:
- 建立一個ImageEditor的物件;
- 呼叫它的Show方法,給它傳遞StorageFile或者Uri引數;
- 註冊它的ImageEditedCompleted事件,接收編輯完成的Image。
幾張截圖,大部分是PC上的,手機上也適用。介面太糙,UI可以自己去設計,底圖旋轉,剪下功能沒有完善,如果需要用得著的童鞋自己實現一下即可,不費力。