zoukankan      html  css  js  c++  java
  • Win2D 官方文章系列翻译

    本文为个人博客备份文章,原文地址:

    http://validvoid.net/win2d-offscreen-drawing/

    应用有时需要将图形绘制到并不立即显示的目标上。此类绘制动作被称作“幕后绘制”或“绘制到纹理”。当应用需要将绘制操作输出保存到一个文件、返回为一个像素数组或留作后续操作的输入源时,常需要进行这种幕后绘制。

    通过使用 Win2D 中的 CanvasRenderTarget 可以轻松实现以上场景。

    CanvasRenderTarget 派生自 CanvasBitmap ,包含一个名为 CreateDrawingSession()的方法。是用 CreateDrawingSession 方法可以把图形内容绘制到一个 CanvasRenderTarget。例如:

    CanvasDevice device = CanvasDevice.GetSharedDevice();
    CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96);
    using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
    {
        ds.Clear(Colors.Black);
        ds.DrawRectangle(100, 200, 5, 6, Colors.Red);
    }

    注意上述示例中调用了一个 Clear 方法。不调用此方法,位图则会以未定义内容进行初始化。通过 CanvasRenderTarget 创建的绘图会话 (drawing sessions) 与 Win2D 提供的 XAML 控件创建的绘图会话对 Clear (清除)行为的处理是不同的。这种差异使得应用可以对(多个) CanvasRenderTarget 进行增量修改,而不必每次都重绘整个场景。

    要把一个 CanvasRenderTarget 绘制到另一个绘制会话上,只需调用DrawImage(ICanvasImage) 方法或其任意一个重载即可。例如:

    void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
    {
        args.DrawingSession.DrawImage(offscreen, 23, 34);
    }

    CanvasRenderTarget 继承了 IGraphicsEffectSource 接口,因此还可以把一个 CanvasRenderTarget 作为输入源,传入到一个特效 (Effect)进行使用。例如:

    GaussianBlurEffect blurEffect = new GaussianBlurEffect()
    {
        Source = offscreen,
        BlurAmount = 3.0f
    };

    应用能够在一个 CanvasRenderTarget 上多次反复关闭、重开(多个)绘制会话。

    在绘制会话对象被释放之前,绘制操作都不会应用到 CanvasRenderTarget。在 C# 里,使用 using 语句块就能妥善处理这一问题。

    另外值得一提的是 CanvasRenderTarget 并不是一个 XAML 控件,它与 XAML 元素树完全无关。因此它适用于任何 XAML 或非 XAML 应用。

  • 相关阅读:
    nginx 配置https详细步骤
    Git 上传本地仓库到远程git仓库
    VUE 配置vscode关于vue插件
    ORA-01439:要更改数据类型,则要修改的列必须为空
    Oracle查看主键、删除主键、添加联合主键
    std::stoi, std::stol, std::stoll
    C+++string类如何判断字符串为空
    1day漏洞反推技巧实战(1)
    java反射笔记,自用
    tomcat Valve内存马
  • 原文地址:https://www.cnblogs.com/validvoid/p/win2d-offscreen-drawing.html
Copyright © 2011-2022 走看看