2018-8-10-win10-uwp-win2d-使用-Path-绘制界面
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp win2d 使用 Path 绘制界面
|
lindexi
|
2018-08-10 19:17:19 +0800
|
2018-06-06 08:57:28 +0800
|
win2d UWP 渲染
|
本文告诉大家如何在 Win2d 使用 Path 路径绘图
CanvasGeometry
在 win2d ,可以使用 DrawGeometry 的方式画出几何。而路径 Path 就是一种 Geometry 。传入的 CanvasGeometry 参数是不能通过实例创建,需要使用静态工厂创建。
通过 CanvasGeometry.CreatePath 就可以创建出路径几何,通过告诉线条颜色和线条宽度就可以画出 Path ,这个方法只能画出线条。
如果需要填充 Path 需要使用 FillGeometry 方法。
CanvasPathBuilder
因为 CanvasGeometry.CreatePath 的参数是 CanvasPathBuilder ,而 Path 也需要告诉每个点是如何画,所以需要 CanvasPathBuilder 来告诉 Path 每个点是怎么画。
在创建 CanvasPathBuilder 的时候需要传入 ICanvasResourceCreator ,也就是通过 args.DrawingSession 可以创建 CanvasPathBuilder 来画。
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
上面的代码是写在 Canvas_OnDraw
private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
{ using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
}
}
因为Path 可以使用多个 Path 组合,如果需要新建一个 Path 需要调用 BeginFigure 告诉 win2d 开始画出一个新的图形。在图形画完需要调用 EndFigure 告诉 win2d 已经画完。
例如准备画一条线,需要在开始画的时候调用 BeginFigure 告诉起点,在结束的时候使用 EndFigure 并且告诉这是不是封闭图形。
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
canvasPathBuilder.BeginFigure(100,100);
canvasPathBuilder.AddLine(200,100);
canvasPathBuilder.EndFigure(CanvasFigureLoop.Open);
}
现在运行代码会发现没有画出图形,因为没有调用画出来。调用 DrawGeometry 需要传入需要画的几何、线条颜色,线条宽度
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
canvasPathBuilder.BeginFigure(100, 100);
canvasPathBuilder.AddLine(200, 100);
canvasPathBuilder.EndFigure(CanvasFigureLoop.Open); args.DrawingSession.DrawGeometry(CanvasGeometry.CreatePath(canvasPathBuilder), Colors.Gray, 2);
}
画线
从上面的例子已经告诉大家如何画线,使用 BeginFigure 添加起点,然后使用 AddLine 把上一个点和输入的连成直线。
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
canvasPathBuilder.BeginFigure(100, 100);
canvasPathBuilder.AddLine(200, 100);
canvasPathBuilder.EndFigure(CanvasFigureLoop.Open);
}
例子
下面给大家看一些已经画好的路径界面
绘制坐标系
private void DrawPath(CanvasControl canvas, CanvasDrawEventArgs args)
{
var width = (float) canvas.ActualWidth-20;
var height = (float) (canvas.ActualHeight)-20;
var midWidth = (float) (width * .5);
var midHeight = (float) (height * .5);
Color color = Colors.Gray;
using (var cpb = new CanvasPathBuilder(args.DrawingSession))
{
// Horizontal line
// 水平线
cpb.BeginFigure(new Vector2(0, midHeight));
cpb.AddLine(new Vector2(width, midHeight));
cpb.EndFigure(CanvasFigureLoop.Open); // Horizontal line arrow
// 水平箭头
cpb.BeginFigure(new Vector2(width - 10, midHeight - 3));
cpb.AddLine(new Vector2(width, midHeight));
cpb.AddLine(new Vector2(width - 10, midHeight + 3));
cpb.EndFigure(CanvasFigureLoop.Open); args.DrawingSession.DrawGeometry(CanvasGeometry.CreatePath(cpb), color,strokeWidth: 1);
} using (var cpb = new CanvasPathBuilder(args.DrawingSession))
{
// Vertical line
// 垂直线
cpb.BeginFigure(new Vector2(midWidth, 0));
cpb.AddLine(new Vector2(midWidth, height));
cpb.EndFigure(CanvasFigureLoop.Open); // Vertical line arrow
cpb.BeginFigure(new Vector2(midWidth - 3, 10));
cpb.AddLine(new Vector2(midWidth, 0));
cpb.AddLine(new Vector2(midWidth + 3, 10));
cpb.EndFigure(CanvasFigureLoop.Open); args.DrawingSession.DrawGeometry(CanvasGeometry.CreatePath(cpb), color, 1);
}
}
2018-8-10-win10-uwp-win2d-使用-Path-绘制界面的更多相关文章
- win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl
本文来告诉大家 CanvasVirtualControl ,在什么时候使用这个控件. 在之前的入门教程win10 uwp win2d 入门 看这一篇就够了我直接用的是CanvasControl,实际上 ...
- win10 uwp 弹起键盘不隐藏界面元素
本文主要讲,在我们使用手机输入的时候,会因为手机的虚拟键盘隐藏了一些界面的元素.我们有一个简单的方法让虚拟键盘不隐藏界面元素. 我们需要的界面元素是在显示了虚拟键盘后的空间能全部显示,如果不能的话,还 ...
- win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑
本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...
- win10 uwp 渲染原理 DirectComposition 渲染
本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制 在 Windows Vista 就引入了一个服务,桌面窗口管理器 ...
- win10 uwp 萤火虫效果
原文:win10 uwp 萤火虫效果 本文在Nukepayload2指导下,使用他的思想用C#写出来. 本文告诉大家,如何使用 win2d 做出萤火虫效果. 安装 win2d 安装win2d的方法请使 ...
- win10 uwp 列表模板选择器
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...
- win10 uwp 毛玻璃
毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...
- win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序
本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台. 本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单. Visua ...
- win10 uwp 使用 Microsoft.Graph 发送邮件
在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...
- Win10 UWP开发实现Bing翻译
微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...
随机推荐
- linux系统命令配置文件
系统命令要独占地控制系统,并让一切正常工作.所有如 login(完成控制台用户身份验证阶段)或 bash(提供用户和计算机之间交互)之类的程序都是系统命令.因此,和它们有关的文件也特别重要.这一类别中 ...
- 网页性能测试之WebPageTest
想知道您的网站,性能怎么样? 很自然,首先得找一个广被认可的测试工具.我们推荐WebPageTest: WebPageTest 它是google 开源项目”make the web faster “的 ...
- left join table_a on ...like...
- sed 命令用法
Sed:对文件进行编辑操作,对象是行.操作后在屏幕输出结果.如果要直接修改则加-i命令-f filename: 执行某文件内的sed命令-n 只显示被修改的那一行 如文件test内容:Letyou a ...
- Gulp和webpack的作用和区别
gulp是工具链.构建工具,可以配合各种插件做js压缩,css压缩,less编译 替代手工实现自动化工作 1.构建工具 2.自动化 3.提高效率用 webpack是文件打包工具,可以把项目的各种js文 ...
- 为什么不喜欢在 QQ 群里回答问题?
为什么不喜欢在 QQ 群里回答问题? 没有主题,主题随时都在变. 回答后无法备份,当然自己有心可以总结一下. 实时性要求太强,可能回答但是突然有事离开,再回头看已经是 几十条的留言. QQ 群用来闲聊 ...
- laravel重定向到上一个页面怎么带参数返回 withsucess 成功提示信息
//控制器中 return back()->with('success','操作成功'); //with的参数1是一个session变量名,参数2为该session变量值,在视图直接这样获取 @ ...
- Java之Socket与HTTP区别
我们都知道TCP/IP协议共分四层: ① 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物理接口细节. ...
- 当flex遇到white-space: nowrap; 排版就飞了的神奇问题 吐血
在做一个移动端排班的时候需要某一行的字超出的部分用省略号代替 然后写着发现后面排版乱了 HTML结构如下 我想让第二个span的内容加省略号 css正确的代码如下 .list { width: 1 ...
- iphone开发中调用系统打电话功能
iphone开发中调用打电话功能,一般有2种: 1.系统的打电话代码,不返回当前程序: Java代码 [[UIApplication sharedApplication] openURL:[NSURL ...