使用Win2D在UWP程序中2D繪圖(二)

繪製API canvas

首先仍是看一下前文的的示例:緩存

    args.DrawingSession.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
    args.DrawingSession.DrawText("Hello, world!", 100, 100, Colors.Yellow);
spa

它使用了DrawingSesion下發繪製命令,和WPF中的DrawingContext差很少,就是一個繪製上下文。它主要的命令分爲以下兩種:DrawXXX和FillXXX。DrawXXX只是繪製圖像,而FillXXX只填充圖像,這裏和WPF那種繪製和填充在一個API裏的方式稍稍有點不一樣。 orm

因爲API並很少,這裏列舉了一下,基本上看着就知道怎麼用了。 事件

  • DrawCircle
  • DrawCachedGeometry
  • DrawEllipse
  • DrawGeometry
  • DrawImage
  • DrawInk
  • DrawLine
  • DrawRectangle
  • DrawRoundedRectangle
  • DrawText。
  • DrawTextLayout

 

  • FillCircle
  • FillEllipse
  • FillGeometry
  • FillRectangle
  • FillRoundedRectangle

它的API還比較簡單,基本上看着就知道怎麼用,不過其中的DrawImage能傳入一個IcanvasImage類型,而這個類型並不單單是圖片,包括下面介紹的CanvasCommandList和Effect都是這種類型,使用的時候須要熟悉一下。 圖片

 

2D轉換 ip

2D繪圖的過程當中每每還伴隨着一些平移,旋轉等2D轉換的操做,DrawingSession中提供了一個Transform屬性能夠傳入一個3*2矩陣實現2D轉換。 資源

    var ds = args.DrawingSession;

    ds.Transform = Matrix3x2.CreateTranslation(new Vector2(200, 100));
    ds.DrawText("A", 0, 0, Colors.White);

    ds.Transform *= Matrix3x2.CreateRotation(12, new Vector2(200,80));
    ds.DrawText("B", 0, 0, Colors.White);
get

 

CanvasCommandList cmd

CanvasCommandList能夠緩存一組繪製命令,而後統一繪製。它能夠用於分塊繪製,也能夠用於減小重複繪製。

    var renderTarget = new CanvasCommandList(sender);
    using (var clds = renderTarget.CreateDrawingSession())
    {
        clds.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
        clds.DrawText("Hello, world!", 100, 100, Colors.Yellow);
    }

    args.DrawingSession.DrawImage(renderTarget);

 

濾鏡效果

Win2D的一個比較給力的特性就是支持濾鏡特效,用它能夠很是方便的實現經常使用的模糊、陰影等效果,這裏以高斯模糊爲例修改下上面的效果。

    var cmdList = new CanvasCommandList(sender);
    using (var clds = cmdList.CreateDrawingSession())
    {
        clds.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
        clds.DrawText("Hello, world!", 100, 100, Colors.Yellow);
    }

    var effect = new GaussianBlurEffect();
    effect.Source = cmdList;

    args.DrawingSession.DrawImage(effect);

系統還內置了許多經常使用的濾鏡效果,它們都以Effect結尾,放在Microsoft.Graphics.Canvas.Effects名字空間下。

 

繪製事件

除了前面用到的繪製的時候觸發繪製操做的Draw事件外,還有一個比較經常使用的事件CreateResource,它在最開始加載控件的時候觸發,每每用於初始化各類資源。

另外再來看看Draw事件的觸發條件,它基本上和WPF的OnRender差很少,也就是說,通常在初次加載時會觸發,改變窗口大小的時候會觸發,拖動窗口時不會觸發。若是要在後臺控制其重繪也比較簡單,但用其Invalidate方法便可。

相關文章
相關標籤/搜索