本篇作为技术分享系列的第四篇,详细讲一下手绘视频中 Surface Pen 和 Surface Dial 的使用场景。

先放一张微软官方商城的图,Surface 的使用中结合了 Surface Pen 和 Surface Dial。

Surface Pen 的使用场景不难想象,就像 iPad 和 Android Pad 配置的笔一样,Surface Pen 也在书写、书画和日常操作中发挥着很重要的作用。微软的 Surface Pro 和 Surface Book 系列中都重点强调了 Surface Pen 的多种用途和便捷性。而在手绘视频中,用户主动创作、体现个性化最重要的部分,就是用户用鼠标、手指触控或 Surface Pen 操作的文字和绘画了,相比鼠标和手指,Surface Pen 无疑是最适合创作的了。

Surface Dial 相对来说会稍微陌生一些,日常工作中很少见到,因为 Surface Pro 和 Surface Book 销售时并不包括它,需要单独购买,所以使用没有那么普及。但是对于艺术创作者,Surface Dial 还是相当好用的,它可以完成很多辅助快捷功能,发挥非主力手的作用,解放你的主力手,如图中所示:右手是主力创作手,专门负责绘画等复杂操作;左手是非主力手,负责一些功能性的辅助操作,比如切换笔的颜色、粗细、放大缩小画布等,另外 Dial 会默认附加一些系统级别的快捷功能,如音量调节,界面滚动等。另外 Dial 的操作分为两种模式:off screen 和 on screen,顾名思义就是屏幕外和屏幕上的功能,目前支持 on screen 功能的只有 Surface Studio,其他设备只能 off screen 操作。on screen 时,圆形菜单会出现在 Dial 的周围,而且会跟随 Dial 移动,操作相当直观,而 off screen 时,圆形菜单会以较小的形式出现。下图分别是 on screen 和 off screen 的模式:

 

对 Surface Pen 和 Surface Dial 有一个初步的认识后,我们就开始正式讲一下它们在 UWP 手绘视频创作工具中的应用。

首先是 Surface Pen,它除了可以完成鼠标的操作,如点击等之外;对于手绘视频应用更重要的是,笔记书画的功能。这里我们主要用到了 InkToolbar 和 InkCanvas,InkToolbar 是一个 Ink 工具条,支持自定义按钮,提供多种笔迹/直尺/圆角/橡皮擦等,而 InkCanvas 是用于显示 InkToolbar 选择的画笔绘制出来的笔迹的。这方面有很多文章有过系统的介绍,微软官网也有很多文章:https://docs.microsoft.com/en-us/windows/uwp/input-and-devices/pen-and-stylus-interactions,

在手绘视频中的使用,分为两个步骤:1. InkCanvas 绘制完成后,保存为 Ink 数据;2. 取出 Ink 数据,按照线条长度对拆分,保证每段线条不超过某个阈值,然后把拆分后的 Ink 序列传给 Win2D 去做动态绘制。

以上处理,只针对圆珠笔有效,而针对非圆珠笔,因为存在线条对笔尖角度的变换和半透明颜色的叠加,所以需要做一点处理,如铅笔、钢笔和荧光笔,需要在笔尖变换方向时做形状判断,在线条叠加时做颜色加深;另外针对荧光笔,它对被覆盖的颜色会有荧光的混色效果,实际是把被覆盖颜色修改掉的,需要使用 OpenCV 做混色的计算,还需要注意边缘的平滑处理。

除了系统提供的笔尖,我们也可以自己定义笔尖,这里简单提一下:笔尖有两个重要的属性需要定义,笔尖的形状和它的填充。既包括了笔尖的轮廓,也包括他的填充,如圆珠笔的原型轮廓,钢笔的椭圆形轮廓;圆珠笔的完全不透明填充,铅笔的离散点填充,荧光笔的半透明填充。定义了这些属性后,在 InkCanvas 中书写时,笔尖结合方向,决定了不同方向笔画的形状和不同的粗细,笔尖的填充,决定了在反复涂画时,是否有颜色加深处理。

接下来是 Surface Dial,它有几种操作:长按,短按和旋转,我们所有的操作都基于这几个操作。Surface Dial 提供了一个 Menu,长按 Dial 后呼出 Menu,我们需要把自定义操作的数据塞进 Menu 里,作为 Menu 的一个 Item,在 Dial 旋转到该 Item 时,短按后进入它的功能。可以是直接执行某些功能,也可以是进去另一个子 Menu。Dial 呼出时的 Menu 样式是不可以自定义的,所以我们如果要自定义 Menu 样式,只能作为子 Menu 出现,如上面 on screen 图所示,这个 Menu 就是一个完全自定义的颜色选择器。

因为子 Menu 可以完全自定义,所以我们可以想一下怎么制作这个 Menu,比如颜色选取,我们用一个圆形供用户旋转,短按后选择某个颜色,长按切换功能;为了兼容 off screen 和 on screen 模式,我们判断到 off 或 on 后,决定圆形的半径,在 off 时小一些,在 on 时留出 Dial 的尺寸。因为 Dial 的旋转操作方式,很多子 Menu 都选择了圆形的方式。

Ink 和 Dial 的介绍就到这里,我们更多的介绍它的应用场景,具体的实现代码大家可以去微软官方查看文档,实现过程相对简单,不做赘述了,谢谢!

UWP 手绘视频创作工具技术分享系列 - Ink & Surface Dial的更多相关文章

  1. UWP 手绘视频创作工具技术分享系列

    开篇先来说一下写这篇文章的初衷. 初到来画,通读了来画 UWP App 的代码,发现里面确实有很多比较高深的技术点,同时也是有很多问题的,扩展性,耦合,性能,功能等等.于是我们决定从头重构这个产品,做 ...

  2. UWP 手绘视频创作工具技术分享系列 - 全新的 UWP 来画视频

    从2017年11月开始,我们开始规划和开发全新的来画Pro,在12月23日的短视频峰会上推出了预览版供参会者体验,得到了很高的评价和关注度.吸取反馈建议后,终于在2018年1月11日正式推出了全新版本 ...

  3. UWP 手绘视频创作工具技术分享系列 - 有 AI 的手绘视频

    AI(Artificial Intelligence)正在不断的改变着各个行业的形态和人们的生活方式,图像识别.语音识别.自然语言理解等 AI 技术正在自动驾驶.智能机器人.人脸识别.智能助理等领域中 ...

  4. UWP 手绘视频创作工具技术分享系列 - 手绘视频导出

    手绘视频最终的生成物是视频文件,前面几篇主要讲的是手绘视频的创作部分,今天讲一下手绘视频的导出问题.主要以 UWP 为例,另外会介绍一些 Web 端遇到的问题和解决方法. 如上所述,手绘视频在创作后, ...

  5. UWP 手绘视频创作工具技术分享系列 - 手绘视频与视频的结合

    本篇作为技术分享系列的第三篇,详细讲一下手绘视频中结合视频的处理方式. 随着近几年短视频和直播行业的兴起,视频成为了人们表达情绪和交流的一种重要方式,人们对于视频的创作.编辑和分享有了更多的需求.而视 ...

  6. UWP 手绘视频创作工具技术分享系列 - SVG 的解析和绘制

    本篇作为技术分享系列的第一篇,详细讲一下 SVG 的解析和绘制,这部分功能的研究和最终实现由团队的 @黄超超 同学负责,感谢提供技术文档和支持. 首先我们来看一下 SVG 的文件结构和组成 SVG ( ...

  7. UWP 手绘视频创作工具技术分享系列 - 文字的解析和绘制

    本篇作为技术分享系列的第二篇,详细讲一下文字的解析和绘制,这部分功能的研究和最终实现由团队共同完成,目前还在寻找更理想的实现方式. 首先看一下文字绘制在手绘视频中的应用场景 文字是手绘视频中很重要的表 ...

  8. UWP 手绘视频创作工具技术分享系列 - 位图的绘制

    前面我们针对 SVG 的解析和绘制做了介绍,SVG 是图片的一种形式,而另一种很重要的图片是:位图,包括 png.jpeg.bmp 等格式.位图的基本规则是,组成的基本元素是像素点,由宽度 * 高度个 ...

  9. UWP 手绘视频创作工具 “来画Pro” 技术分享系列

    开篇先来说一下我和来画的故事,以及写这篇文章的初衷. 今年年初时,我还在北京,在 Face++,做着人脸识别技术的 Windows 和 Android 端,做着人工智能终将实现世间所有美好的梦.这时的 ...

随机推荐

  1. PHP实现excel

    导入 public function excel_put(){ //先做一个文件上传,保存文件 $path=$_FILES['file']; $filePath = "uploads/&qu ...

  2. Linux中MySQL配置文件my.cnf参数优化

    MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的.MySQL的参数优化也不例外,对于不同的需求,还有硬件的配置,优化不可能又最优选择,只能慢慢的 ...

  3. JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)

    MySQL到Redis数据复制方案 无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来 ...

  4. HDU3507 Print Article (斜率优化DP基础复习)

    pid=3507">传送门 大意:打印一篇文章,连续打印一堆字的花费是这一堆的和的平方加上一个常数M. 首先我们写出状态转移方程 :f[i]=f[j]+(sum[i]−sum[j])2 ...

  5. hdu 5305 friends

    每一次比赛的时候脑子都卡顿, 这次更离谱,我居然二进制枚举边,这么大的复杂度.而且剪不了枝 后来学长说着是道爆搜.搜每一条边.恍然大悟. 仅仅须要剪掉点的度数是奇数的时候,或者他的线上朋友或线下朋友大 ...

  6. NIO相关基础篇三

    转载请注明原创出处,谢谢! 说在前面 上篇NIO相关基础篇二,主要介绍了文件锁.以及比较关键的Selector,本篇继续NIO相关话题内容,主要谈谈一些Linux 网络 I/O模型.零拷贝等一些内容, ...

  7. 工厂方法模式的一些思考(java语法表示)

    同为创造型设计模式的简单工厂模式可以理解为对new关键字的代替. 本着重复三次即重构的原则,如果一个对象在不同的地方被new了两次以上,那就可以考虑使用它.那我们为什么要用简单工厂模式代替new呢?就 ...

  8. Unity优化之GC——合理优化Unity的GC

      转载请标明出处http://www.cnblogs.com/zblade/ 最近有点繁忙,白天干活晚上抽空写点翻译,还要运动,所以翻译工作进行的有点缓慢 =.= PS: 最近重新回来更新了一遍,文 ...

  9. iOS 多线程 之 GCD(大中枢派发)(一)

    导语: 本文个人原创,转载请注明出处(http://www.cnblogs.com/pretty-guy/p/8126981.html) 在iOS开发中多线程操作通常是一下3种,本文着重介绍Dispa ...

  10. 《深入理解计算机系统》【PDF】下载

    <深入理解计算机系统>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382303 内容提要 本书主要介绍了计算机系统的基本概念,包 ...