墨迹识别 墨迹识别器认知服务提供基于云的 REST API 用于分析和识别数字墨迹内容。 与使用光学字符识别 (OCR) 的服务不同,该 API 需要使用数字墨迹笔划数据作为输入。...数字墨迹笔划是 2D 点(X,Y 坐标,表示数字手写笔或手指的动作)的时序集。 然后,墨迹识别器会识别输入中的形状和手写内容,并返回包含所有已识别实体的 JSON 响应。 ?...墨迹数据的原理主要是一些手写输入设备,比如平板,手写板等。 创建墨迹识别资源 跟前面的内容一样,在portal控制台找到墨迹识别功能,点击创建,取一个实例名。...新建一个WPF项目 我们这次同样实现一个WPF小程序。界面上放置一个InkCanvas用来手写,一个文本框用来显示识别的文本,一个按钮用来触发识别。 ?...控件需要使用的是Microsoft.Toolkit.Wpf.UI.Controls包下的,如果本地没有使用nuget进行安装 采集墨迹 inkCanvas load事件里设置输入设备的类型:
UWP 的 InkCanvas 控件,详细请看 WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 做高性能笔迹应用 如果不想要打包为 MSIX...包,请参阅 WPF 引用 UWP 控件 不打包为 MSIX 分发的方法 在开始之前,需要了解的是 UWP 的 InkCanvas 控件是没有背景色这个属性的,也就是说 UWP 的 InkCanvas 控件需要依靠外层的容器或者背后的元素给的颜色作为背景色...但是在 WPF 里面 HOST 了 UWP 的控件的方式,相当于将 UWP 作为一个窗口嵌入到 WPF 应用里面,这就意味着在 UWP 控件所在的范围,不能使用 WPF 的渲染,在此范围里面的元素都被...以上的代码放在 github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码...高性能笔迹原理 WPF 高性能笔 WPF 高速书写 StylusPlugIn 原理 WPF 最小的代码使用 DynamicRenderer 书写 WPF 使用 Composition API 做高性能渲染
最近遇到两个非常有意思的问题,虽然看起来没什么关联,但通过深入的思考,笔者发现它们还是有共性的,一起来看看这两个场景吧。 01 几位测试负责人在聊关于在CICD上设置质量门禁的问题。...有位负责人提出,是否需要设置一个类似弱门禁的功能,当测试用例执行时间较长,或者面临紧急发版时,可以先跳过质量门禁(先发布,事后出报告,如果设置为不启用门禁,那就没有报告,所以需要提供类似弱门禁的能力),...那么我们需要一起去探讨,作为冒烟测试,或者最低限度的质量保障,我们是否需要这么多的用例?这些用例是否可以被精简?如果确实需要这么多,那么作为平台方,我们是否可以提升执行机的性能?能否分布式去执行?...问题一旦被解决,那么多数情况下,就不会有人再去关注了。那么发布的线上的时候,才发现配置功能还是有问题,难道还是手动处理么?所以,在问题发生的时候,应该去从根本上去解决,把功能做好。...我们在思考问题时,要去关注我们的目标是什么,解决问题的方案是否有利于达成最终的目标,而不是仅仅解决当下的问题。
} 现在代码看起来还不多,其实通过如上的代码就是最简单的方式让 WPF 引用 UWP 的笔迹控件了。...添加刚才创建的 WPF 的引用。...更多请参阅旁加载安装部分的内容 如果做分发此应用的话,推荐使用 加强版在国内分发 UWP 应用正确方式 通过win32安装UWP应用 的方法进行分发,此时就不需要让用户去关注证书问题 以上的代码放在 github...WPF 引用 UWP 控件 不打包为 MSIX 分发的方法 如果想给画布加上背景,请看 WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法...更多触摸请看 WPF 触摸相关 更多笔迹相关请看 WPF 渲染原理 高性能笔迹原理 WPF 高性能笔 WPF 高速书写 StylusPlugIn 原理 WPF 最小的代码使用 DynamicRenderer
本文来告诉大家使用比较底层的方法来实现 WPF 的笔迹橡皮擦 在 WPF 里面,对于笔迹来说,应该放在 Stroke 类里面,而不是作为点的集合存储。...阅读本文,你将了解如何自定义橡皮擦,如自定义橡皮擦的外观样式,了解如何不依赖 InkCanvas 来实现笔迹的擦除 原本我是想采用 WPF 最简逻辑实现多指顺滑的笔迹书写 的方式来做笔迹的绘制部分的,但是考虑使用上面博客的方法将会让大家需要多了解很多触摸相关的知识...另一个是在进行擦除之后新创建的笔迹。...触摸相关 更多笔迹相关请看 WPF 渲染原理 高性能笔迹原理 WPF 高性能笔 WPF 高速书写 StylusPlugIn 原理 WPF 最小的代码使用 DynamicRenderer 书写 WPF...使用 Composition API 做高性能渲染 WPF 使用 Win2d 渲染 win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl
按照微软的官方文档,大部分的文档都会说如果用了 XAML Islands 等技术的时候,需要新建一个打包项目,将 WPF 应用打包为 msix 等才可以进行分发和使用。..." 设置设置为 "true"。...如果想要发布出去,还请右击项目选择发布,就和发布其他 .NET Core 应用的方式进行发布 以上的代码放在 github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹...获取代码之后,进入 LaykearduchuNachairgurharhear 文件夹 更多 WPF 引用 UWP 做高性能笔迹文档请看: WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls...的 InkCanvas 做高性能笔迹应用 WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法
先新建一个空 WPF 应用,在本文末尾我放上了本文用到的全部代码的下载方法。再配置引用 WindowsAppSDK 库,通过 WindowsAppSDK 的方式使用到 WinRT 组件。... 以上代码的最低版本要求设置为 10.0.17763.0 就是对应 1809 版本。...再放上一个 InkCanvas 控件用来写内容,且由于接下来的 mnist.onnx 模型走的是图像识别的方式,为了提高识别率,还需要让写出来的笔迹粗一些。...: 使用系统里面定制的属于高性能的设备的 DirectX 设备执行模型。...,大家可以了解如何在 WPF 应用里面,通过 WinRT 的方式对接 WinML 层。
当然,因为 14393 SDK 支持了很多新功能,所以在后面的更新中,有些功能也发生了很多变化,导致系统升级后的支持问题。 ...中, 编程语言可以是 C++、C# 或 VB。...简单的处理过程包括:利用 InkCanvas 完成绘制后,保存 Ink 数据;获取 Ink 数据,按照 SVG 绘制原理进行绘制;自定义笔触的实现,数据存储和绘制方式。 6....下面简单介绍一下各个新特性,以及和手绘视频的结合方式。 1. Windows Ink Windows Ink 平台与笔设备一起提供了一种创建数字手写便笺、绘图和批注的自然方法。...该平台支持将数字化器输入捕获为墨迹数据、生成墨迹数据、管理墨迹数据、在输出设备上以笔划墨迹形式呈现墨迹数据以及通过手写识别将墨迹转换为文本。
本文告诉大家如何在基于 .NET 6 的 WPF 使用 WinRT 的手写识别功能 在开始之前需要先创建 WPF 项目,创建完成之后,可替换 csproj 项目文件为以下代码,用来安装初始化环境 <Project...10.0.19041 负载等,基本上 Visual Studio 告诉你缺哪个就安装哪个 先在 MainWindow.xaml 放入一个 InkCanvas 元素,用来绘制笔迹和创建笔迹对象,代码如下... 在 InkCanvas_OnStrokeCollected 方法里面执行手写识别功能,以下是识别形状的代码逻辑 using Windows.Foundation; using...如果期望在 Win10 及以下版本使用笔迹识别,可选使用 Microsoft.Ink 组件 本文以上代码放在github 和 gitee 欢迎访问 可以通过如下方式获取源代码,先创建一个空文件夹,接着使用命令行
需要自己处理笔迹的多笔同步问题,处理笔迹的长笔迹分段问题,处理笔迹的绘制问题,处理动态笔迹切换 本文提供的方法依然可以实现非常高性能的笔迹,比 WPF 最快的笔迹实现还要快,但需要自己处理好各个部分的逻辑...本文提供的方法的性能依然不如只使用默认的 InkCanvas 快 界面 在开始之前,请先安装 Win2d 库,可参阅 win10 uwp win2d 入门 看这一篇就够了 博客了解如何安装 在 XAML...请在自己的产品逻辑里面,手动分开为多个不同的笔迹段,用来提升性能 上面代码通过调用 CanvasControl 的 Invalidate 让 Win2d 的画布重新绘制。...这样也能提升笔迹的动态绘制性能,因为笔迹在绘制的时候需要不断调用 Win2d 的刷新,如果此时刷新的是一个只包含很少笔迹的动态笔迹层的画布,那每次刷新的性能就比较好 无限漫游 如果需要做无限漫游,可以使用...方法传入缩放和平移的矩阵,此时创建出来的笔迹是包含了变换的 代码 本文所有代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹
本文告诉大家如何在 UWP 上让 win2d 画出笔迹,通过实际测试发现在 UWP 的笔迹的性能比在 WPF 高很多。...但是如果只是使用默认的 InkCanvas 可以做的很少,同时性能也不是特别高,在加上 win2d 才可以做到和来画一样快的性能 在参加微软技术暨生态大会 2018听了邵猛大佬的利用 Windows 新特性开发出更好的手绘视频应用学到了使用...通过测试使用 Pointer 和 InkCanvas 的性能相差在我的设备是 16 ms 左右,需要知道,笔迹的书写过程,相差 16 ms 是一个很大的值。...为什么通过 InkCanvas 可以拿到很高的性能?...因为在 InkCanvas 使用了不清真的方式实现了从触摸收集点的方法,而使用 Pointer 是通过消息循环给到程序,同时 Pointer 还需要经过路由事件,这样就让笔迹书写速度不够快。
根据点集创建一条笔迹轨迹的一个实现方式是创建一条几何图形,将几何图形绘制到界面上。在 UI 框架的底层里,是不存在笔迹的概念的,只有画图、画文本、画几何图形等基础绘制原语而已。...github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init...笔迹的粗细变更一般来说和触摸压感相关,换句话说,想要实现跟随触摸压感变更而变更粗细的笔迹轨迹轮廓就需要用到至少比折线更加复杂的方式 接下来介绍的方式是用两条线段绘制笔迹,可以将笔迹元素理解为一个由两条折线构成的闭合...上图是我开了调试模式的效果,调试模式就是在原笔迹元素的基础上,绘制出蓝色的原始输入的点集,以及黄色的端点 以上的代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹...同时为了消除算出来的瞬间某个点出现比较大的抖动,也就是类似葫芦的轨迹的问题(这话是我说的,不一定他是真的处理这个问题,只是我推导他的算法能够处理这个问题),使用了平滑滤波方法,由于笔迹绘制是实时的,也就是后面的点是不可知的
在 WPF 中有 DynamicRenderer 提供高性能的书写,这个类在 WPF 只有 InkCanvas 使用,如果想要在自己的 UIElement 使用,需要写一些代码 先创建一个 UIElement...自定义一个,因为 DynamicRenderer 继承于 StylusPlugIn 需要使用 UIElement 的 StylusPlugIns 属性才能添加他 下面创建一个 MeexikelelHaiwurbe...高性能笔 WPF 高速书写 StylusPlugIn 原理 ---- 本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/WPF-%E6%9C%...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
有时开发应用后,会为某个Activity创建一个桌面快捷方式,以后希望通过快捷方式直接进入到该Activity里,加Activity A。譬如百度卫士的桌面加速球就是这样。 ...但是会碰到如下问题,当你的应用没有完全退出,譬如在一个其他的Activity B里,按下home键后,在通过桌面Activity A的快捷方式点击后,系统并不会进入到Activity A里,而是会先打开你未关闭的...这是由于android系统的task决定的,如果不特别指明某个Activity的task,则整个application是在同一个以包名命名的task里。...A的快捷方式就进入Activity A。...那你需要在Manifest里为 Activity A指明一个不同的task,android:taskAffinity = "com.wiwigo.launcher" 命名随意,只要不与系统包名一样即可。
在 WPF 中有 DynamicRenderer 提供高性能的书写,这个类在 WPF 只有 InkCanvas 使用,如果想要在自己的 UIElement 使用,需要写一些代码 先创建一个 UIElement...自定义一个,因为 DynamicRenderer 继承于 StylusPlugIn 需要使用 UIElement 的 StylusPlugIns 属性才能添加他 下面创建一个 MeexikelelHaiwurbe...需要支持他的输入层和显示层 输入层 对于 StylusPlugIn 需要加入到 UIElement 的 StylusPlugIns 才能收到触摸的消息 这部分的原理比较复杂,请看 WPF 高速书写 StylusPlugIn...,也就是附加的 MeexikelelHaiwurbe 是不可见的 从 WPF 高速书写 StylusPlugIn 原理 可以知道,在 StylusPlugIn 要收到触摸的消息,需要附加的元素可以收到消息才可以...,无论什么点都返回这个元素,于是这个元素就可以做到命中测试,宽度和高度都是最大 当然有层级的关系,不会点到任何的地方都命中这个元素,关于层级请看 WPF 的原理 WPF 源代码 从零开始写一个 UI 框架
本文只聊原理部分 各个硬件都是独立的 假定是需要做触摸屏的笔迹,那么触摸屏和屏幕是独立的硬件,而处理数据的主机又是独立的硬件 独立的硬件意味着可以并行执行,因此最佳方式就是隐藏时间,即极限优化能做到是速度最慢的硬件的频率...因此如果能使用 win10 那么总体渲染性能更强 默认在 WPF 下使用的是 DX 作为渲染引擎,因此纯渲染性能上,使用 DX 一系的框架都是渲染最优的。...如果在框架层上使用,请看 WPF 使用 Composition API 做高性能渲染 因此 Win10 下的 UWP 能做到最快的笔迹,在 Win10 下,一个空应用加上一个空 InkCanvas 就能做到...USB 读取快 在 WPF 中如何使用 RealTimeStylus 请看 WPF 高速书写 StylusPlugIn 原理 在 WinForms 中请看 WinForms 下的高性能笔迹方法 ---...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
本文将不会使用 InkCanvas 而是使用更底的方法,通过 Stroke 进行绘制 这是我在写测试应用的时候,我想要了解我能用多少行代码实现一个多指顺滑的笔迹书写的核心逻辑。...其实在 WPF 下,可以通过 Stroke 类的辅助,不断给 Stroke 添加点的方式,做到绘制出笔迹 绘制笔迹需要给定一个 DrawingAttributes 告诉笔迹的粗细和颜色等 其次需要创建...,但这不是一个高性能的书写方案。...这里的输入就是接收触摸,而输出就是渲染 拿到触摸最快的方法是通过 WPF 高性能笔 的 WPF 高速书写 StylusPlugIn 原理 方法拿到触摸点,简单的代码请看 WPF 最小的代码使用 DynamicRenderer...除非在 WPF 中上 Composition API 使用 Composition API 做高性能渲染 再加上 WPF 使用 Win2d 渲染的方法,使用 win2d 画出笔迹 和 win2d CanvasVirtualControl
使用 通过源代码的方式使用,在 WPF 、UWP 是很简单的,因为现在我不知道怎么去拿 UWP 的源代码,只会使用,所以本文分析的源代码都是 .net Framework 4.7 的,不会说道 UWP...实际上在高性能的笔已经有告诉大家了,不过这里对比一下两者的不同。...动态笔迹 在 WPF 的 Ink 的源代码可以看到 InkCanvas 使用 DynamicRenderer 作为动态笔迹层。动态笔迹层是什么?...动态笔迹是相对静态笔迹的,动态笔迹就是用户在书写的过程,需要按照用户动态加入的点,动态渲染出来笔迹。这一层对笔迹性能要求最高,所以需要通过最快的方式拿到触摸,通过最快的方式画出来。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
欢迎来到Java面试技巧专栏~如何优雅地处理Java多线程编程中的共享资源问题?...❤️ 在Java编程中,多线程是一项强大的技术,但同时也带来了一些挑战,尤其是在处理共享资源时。在多个线程同时访问和修改共享资源时,我们必须小心处理,以避免数据不一致、竞态条件和死锁等问题。...ConcurrentMap concurrentMap = new ConcurrentHashMap(); 使用线程池: 合理使用线程池可以减少线程创建和销毁的开销...(() -> { // 在线程池中执行的任务 }); 避免阻塞: 长时间的阻塞操作可能导致程序性能下降。...通过遵循上述方法和原则,我们可以在Java多线程编程中优雅地处理共享资源问题,从而实现高性能和线程安全的应用程序。 结尾
领取专属 10元无门槛券
手把手带您无忧上云