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, );
using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
ds.Clear(Colors.Black);
ds.DrawRectangle(, , , , Colors.Red);
}
注意上述示例中调用了一个 Clear
方法。不调用此方法,位图则会以未定义内容进行初始化。通过 CanvasRenderTarget 创建的绘图会话 (drawing sessions) 与 Win2D 提供的 XAML 控件创建的绘图会话对 Clear
(清除)行为的处理是不同的。这种差异使得应用可以对(多个) CanvasRenderTarget 进行增量修改,而不必每次都重绘整个场景。
要把一个 CanvasRenderTarget 绘制到另一个绘制会话上,只需调用DrawImage(ICanvasImage) 方法或其任意一个重载即可。例如:
void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(offscreen, , );
}
CanvasRenderTarget 继承了 IGraphicsEffectSource 接口,因此还可以把一个 CanvasRenderTarget 作为输入源,传入到一个特效 (Effect)进行使用。例如:
GaussianBlurEffect blurEffect = new GaussianBlurEffect()
{
Source = offscreen,
BlurAmount = 3.0f
};
应用能够在一个 CanvasRenderTarget 上多次反复关闭、重开(多个)绘制会话。
在绘制会话对象被释放之前,绘制操作都不会应用到 CanvasRenderTarget。在 C# 里,使用 using
语句块就能妥善处理这一问题。
另外值得一提的是 CanvasRenderTarget 并不是一个 XAML 控件,它与 XAML 元素树完全无关。因此它适用于任何 XAML 或非 XAML 应用。
Win2D 官方文章系列翻译 - 幕后绘制的更多相关文章
- Win2D 官方文章系列翻译 - DPI (每英寸点数)和 DIPs(设备独立像素)
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-dpi-dips/ 本文旨在解释物理像素与设备独立像素(DIPs, device independent pi ...
- Win2D 官方文章系列翻译 - 预乘 Alpha
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-premultiplied-alpha/ 在计算机绘图中有两种表示颜色值不透明度的方法.Win2D 中两种方法 ...
- Win2D 官方文章系列翻译 - 像素格式
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-pixel-formats/ DirectXPixelFormat 枚举 包含了 Direct3D 和 DXG ...
- Win2D 官方文章系列翻译 - 调整控件分辨率
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-choosing-control-resolution/ 本文旨在讲解如何配置 Win2D XAML 控件使用 ...
- Win2D 官方文章系列翻译 - 处理设备丢失
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-handling-device-lost/ “设备丢失”是指 GPU 设备失效无法继续进行渲染的情况.GPU ...
- Win2D 官方文章系列翻译 - 避免内存泄漏
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-avoiding-memory-leaks/ 在托管 XAML 应用中使用 Win2D 控件时,必须谨慎处理对 ...
- Win2D 官方文章系列翻译 - 与 Direct2D 互操作
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-interop-with-direct2d/ Win2D 作为 Direct2D 的上层实现,支持与其进行双向 ...
- NLog文章系列——如何配置NLog(转)
NLog使用方法 作者:Jaros?aw Kowalski <> 翻译:CrazyCoder(由衷感谢他的热心!!) 原文:http://www.nlog-project.org/conf ...
- AngularJS系列-翻译官网
公司之前一直用的Web前台框架是Knockout,我们通常直接叫ko,有看过汤姆大叔的KO系列,也有在用,发现有时候用得不太顺手.本人是会WPF的,所以MVVM也是比较熟悉的,学ko也是很快就把汤姆大 ...
随机推荐
- 剑指offer系列57---整数中1出现的次数
[题目]求出1~n的整数中1出现的次数.(10进制) package com.exe11.offer; /** * [题目]求出1~n的整数中1出现的次数. * @author WGS * */ pu ...
- jfinal配置rails的数据表
鉴于rails的部署太可怕,所以有了使用rails的建表工具和migration,用jfinal来开发的想法,在此贴一下需要注意的地方 maven配置 <dependency> <g ...
- android下asynchttp库对于session的支持
默认asynchttp库不支持session,需要用户配置下cookie来处理,直接贴支持session的代码 package example.com.sessiontest; import andr ...
- sealed修饰符
sealed(C# 参考) 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. 在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承. class A {} s ...
- Debug program crash with dump file.
1. Task manager, -> find the process for the program which crashed. 2. Right click the process -& ...
- Studio右键选项中没有Git?
从Git clone一个Project并打开后,都会习惯性的像使用Eclipse一样,选中工程右键,选择Git的对应版本控制选项. 如下图,你只看到了svn. 如何配置才能在右键选项中看到Git呢,我 ...
- 不能向Github提交某一類型的文件
之前在github上建了6個project,但是其中有一個不能提交jar文件,其他的都可以.後來發現原來在項目中有一個叫.gitignore的文件,其他項目里的都是/bin,但是那個不能提交jar的項 ...
- python函数参数前面单星号(*)和双星号(**)的区别
在python的函数中经常能看到输入的参数前面有一个或者两个星号:例如 def foo(param1, *param2): def bar(param1, **param2): 这两种用法其实都是用来 ...
- c# winform快捷键设置
设置 Form 的 KeyPreview=true 然后在Form 的案件事件里判断按钮类型进行分别调用就可以了 private void Form1_KeyDown(object sender, K ...
- 织梦DEDECMS文章、栏目页获取当前页面顶级栏目名称的方法
在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名 ...