使用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方法便可。

相关文章
相关标签/搜索