Win2D快速入门

介绍

  Win2D是一个易于使用的Windows运行时API,用于通过GPU加速进行即时模式2D图形渲染。C#,C ++和VB开发人员可以为Windows通用平台(UWP)编写应用程序。它利用Direct2D的功能,并与XAML和CoreWindow无缝集成。

创建您的项目:

  • 转到“文件”->“新建”->“项目...”
  • 创建一个“空白应用程序(通用Windows)”

将项目的“架构”选项设置为x86或 x64,而不是设置为Any CPU。Win2D是用C ++实现的,因此使用Win2D的项目需要针对特定​​的CPU体系结构。

添加Win2D NuGet软件包:

  • 转到“工具”->“ NuGet软件包管理器”->“管理解决方案的NuGet软件包...”
  • 在“在线搜索”框中键入“ Win2D”,然后按Enter
  • 选择“ Win2D.uwp”软件包,然后单击“安装”,然后单击“确定”。

CanvasControl添加到您的XAML页面:

xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"
  • 在现有的Grid控件内添加CanvasControl:
<Grid>
        <canvas:CanvasControl Draw="CanvasControl_Draw" ClearColor="CornflowerBlue"/>
</Grid>

然后添加一些Win2D绘图代码。

  • 如果创建了C#项目,请编辑MainPage.xaml.cs:
 private void CanvasControl_Draw(Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
        {
            args.DrawingSession.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
            args.DrawingSession.DrawText("Hello world!", 100, 100, Colors.Yellow);
        }

资源释放

Xaml文件中添加 Unloaded 事件

<Page
    x:Class="GanttChartApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:GanttChartApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:canvas= "using:Microsoft.Graphics.Canvas.UI.Xaml" 
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    Unloaded="Page_Unloaded">

    <Grid>
        <canvas:CanvasControl x:Name="canvasControl" Draw="canvasControl_Draw" CreateResources="canvasControl_CreateResources" />
    </Grid>
</Page>
  private void Page_Unloaded(object sender, RoutedEventArgs e)
        {//释放资源
            canvasControl.RemoveFromVisualTree();
            canvasControl = null;
        }

注意

  1. CanvasControl在资源加载完成后自动执行一次Draw事件,如果想重新触发Draw事件(也叫刷新画布),请用CanvasControl.Invalidate();
  2. CanvasVirtualControl刷新画布时,如果想全部刷新,用CanvasVirtualControl.Invalidate();如果想局部刷新,用CanvasVirtualControl.Invalidate(Rect);
  3. CanvasAnimatedControl的Update事件和Draw事件都是不断执行的,你把更新数据的方法写到哪里都行。但是Draw事件不加阻止的不断运行会非常消耗性能。建议在代码里加个bool IsDraw布尔变量,在Draw事件里加个if(IsDraw)来手动控制。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值