2019-1-4-win10-uwp-win2d-CanvasVirtualControl-与-CanvasAnimatedControl
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl
|
lindexi
|
2019-1-4 14:15:9 +0800
|
2018-04-30 16:15:53 +0800
|
UWP win2d 渲染
|
本文来告诉大家 CanvasVirtualControl ,在什么时候使用这个控件。
在之前的入门教程win10 uwp win2d 入门 看这一篇就够了我直接用的是CanvasControl,实际上可以使用的画布还有下面两个
虽然本文主要告诉大家CanvasVirtualControl但是也是会告诉大家什么时候用哪个
CanvasAnimatedControl
如果使用 CanvasControl ,那么只会在一开始使用了 drawn ,如果需要重新更新就需要通过调用 Invalidate 。
如果有很多次调用 Invalidate 会自动合并为一次,所以不能把 Invalidate 调用数和 draw 触发数作为相等。
如果是为了做动画需要不停调用 Invalidate ,在 UWP 比较好的方法是使用 CanvasAnimatedControl 这个可以到每秒 60 帧,而且在用户设备比较差的时候会降低调用频率。
所以做动画的时候需要不停触发重新渲染就使用 CanvasAnimatedControl ,关于这个控件,请看win10 uwp 萤火虫效果
Win2D 中的游戏循环:CanvasAnimatedControl
CanvasVirtualControl
和 CanvasAnimatedControl 频繁重新画不相同的,在 CanvasVirtualControl 的使用范围是很少刷新
如果满足下面任何条件就建议使用 CanvasVirtualControl 而不是 CanvasControl 因为这时的性能比较好
如果你准备画一个非常大的图片
不希望使用很多时间去画看不见的部分
不想把整个图片都放在内存
因为 CanvasVirtualControl 使用位图虚拟化,所以不需要在所有的时候都把位图放在内存中,只有在需要显示的地方才是有效的,存放在内存的,对于不显示的地方是不放在内存,不画出来的。
在一个原来不显示的地方变为显示时就会触发RegionsInvalidated事件,这时就可以画出这部分。
void OnRegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
{
foreach (var region in args.InvalidatedRegions)
{
using (var ds = sender.CreateDrawingSession(region))
{
// draw the region
}
}
}
所以通过这个方法就可以不需要手动去判断哪些是显示的,只要触发了,就是可以画出的。那么怎么知道触发的显示的矩形?实际上从args.InvalidatedRegions就是拿到一个 Rect ,通过这个就可以判断需要显示的是哪个。
很多时候使用 CanvasVirtualControl 都是和 ScrollViewer 一起使用
<ScrollViewer>
<canvas:CanvasVirtualControl Width="10000" Height="10000" RegionsInvalidated="OnRegionsInvalidated" />
</ScrollViewer>
所以在滚动的时候就可以判断哪些需要显示,通过只画显示的来提高性能。
当然在页面大小变化或者 CanvasVirtualControl 需要修改大小,还是需要调用 invalidated 来重新画
void VirtualControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
VirtualControl.Invalidate();
}
其他博客
win2d 毛玻璃:win10 uwp 毛玻璃
2019-1-4-win10-uwp-win2d-CanvasVirtualControl-与-CanvasAnimatedControl的更多相关文章
- win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl
本文来告诉大家 CanvasVirtualControl ,在什么时候使用这个控件. 在之前的入门教程win10 uwp win2d 入门 看这一篇就够了我直接用的是CanvasControl,实际上 ...
- win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑
本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...
- win10 uwp 渲染原理 DirectComposition 渲染
本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制 在 Windows Vista 就引入了一个服务,桌面窗口管理器 ...
- win10 uwp 萤火虫效果
原文:win10 uwp 萤火虫效果 本文在Nukepayload2指导下,使用他的思想用C#写出来. 本文告诉大家,如何使用 win2d 做出萤火虫效果. 安装 win2d 安装win2d的方法请使 ...
- win10 uwp 毛玻璃
毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Win10 UWP开发系列:实现Master/Detail布局
在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...
- Win10 UWP开发实现Bing翻译
微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- 【Win10 UWP】后台任务与动态磁贴
动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...
随机推荐
- JSP Web第三章整理复习 开发环境搭建
P86 WEB工作原理 用户使用浏览器通过HTTP协议请求服务器上的Web资源,服务器接收到该请求后,读取请求的URI所标识的资源,加上其他资源发送给客户端的浏览器,浏览器解析响应中的HTML数据, ...
- nodeJs学习-16 数据字典示例
1.banner ID title 标题 varchar(32) sub_title 副标题 varchar(16) src 图片地址 varchar(64) 2.文章 ID author 作者 va ...
- TIJ——Chapter Twelve:Error Handling with Exception
Exception guidelines Use exceptions to: Handle problems at the appropriate level.(Avoid catching exc ...
- H5+ 分享到微信、朋友圈代码示例
h5+分享到微信.朋友圈代码示例 在使用分享功能的时候会莫名的分享失败,debug时发现是图片过大的问题. 图片过大时ios平台上返回错误码-8,安卓上返回错误码-3(我测试是这样) 因此如果第一次分 ...
- MUI - 实现关闭除指定页面外的其他所有页面的功能
实现关闭除指定页面外的其他所有页面的功能 比如在实现注销登录功能时,要保证旧有的webweiw或缓存不影响新用户的操作,就需要在跳转到登陆页面前关闭其他页面. http://www.cnblogs.c ...
- UVa 10285【搜索】
UVa 10285 哇,竟然没超时!看网上有人说是记忆化搜索,其实不太懂是啥...感觉我写的就是毫无优化的dfs暴力....... 建立一个坐标方向结构体数组,每个节点dfs()往下搜就好了. #in ...
- PHP header 的7种用法
这篇文章介绍的内容是关于PHP header()的7种用法 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 PHP header 的7种用法 1. 跳转页面 header('Locat ...
- Python里的迭代器
迭代器(iterator)协议 · 在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法. 1.__iter__()方法:返回迭代器对象本身: 2.__next ...
- 22-2 模板语言的进阶和fontawesome字体的使用
一 fontfawesome字体的使用 http://fontawesome.dashgame.com/ 官网 1 下载 2 放到你的项目下面 3 html导入这个目录 实例: class最前面的f ...
- 2018-3-22-win10-uwp-设置-HttpClient-浏览器标识
title author date CreateTime categories win10 uwp 设置 HttpClient 浏览器标识 lindexi 2018-3-22 9:1:55 +0800 ...