win10可以很简单在我们的app使用自然输入,这篇文章主要翻译https://blogs.windows.com/buildingapps/2015/09/08/going-beyond-keyboard-mouse-and-touch-with-natural-input-10-by-10/ 一些内容是参见陈染大神
现在很多人还是使用笔和纸来记录,那么可以在电脑输入方式和之前使用的方式一样,很多用户觉得会方便。在win10 我们有一个简单的方法去让用户输入,InkCanvas
。现在edge,OneNote这些都有使用InkCanvas
。
我们可以在我们的页面
<Grid>
<InkCanvas x:Name="ink_canvas"/>
</Grid>
InkPresenter
可以获取InkCanvas基础对象,可以设置输入为笔,触摸,鼠标,上面那个是从微软拿来,因为我是在用电脑。
为了画出上面的图,我们可以设置ink_canvas.InkPresenter.InputDeviceTypes= CoreInputDeviceTypes.Mouse;
public MainPage()
{
this.InitializeComponent();
ink_canvas.InkPresenter.InputDeviceTypes= CoreInputDeviceTypes.Mouse;
}
如果我们需要输入笔和鼠标ink_canvas.InkPresenter.InputDeviceTypes= CoreInputDeviceTypes.Mouse|CoreInputDeviceTypes.Pen;
画出的线我们也可以设置
InkDrawingAttributes attribute = ink_canvas.InkPresenter.CopyDefaultDrawingAttributes()
attribute.Color = Windows.UI.Colors.Crimson
attribute.PenTip = PenTipShape.Rectangle
attribute.PenTipTransform = System.Numerics.Matrix3x2.CreateRotation((float)Math.PI / 4)
attribute.Size = new Size(2, 6)
ink_canvas.InkPresenter.UpdateDefaultDrawingAttributes(attribute)
保存,修改,加载ink
我们可以给用户选择他当前使用橡皮擦、铅笔还是他需要的。
我们给用户按钮铅笔,橡皮擦
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<InkCanvas x:Name="ink_canvas" Grid.RowSpan="2" />
<CommandBar Grid.Row="1">
<AppBarButton Icon="Edit" Click="pencil"/>
<AppBarButton Click="eraser">
<AppBarButton.Icon>
<BitmapIcon UriSource="ms-appx:///Assets/eraser_128px_1197233_easyicon.net.ico"/>
</AppBarButton.Icon>
</AppBarButton>
</CommandBar>
</Grid>
</Grid>
private void eraser(object sender, RoutedEventArgs e)
{
ink_canvas.InkPresenter.InputProcessingConfiguration.Mode =
InkInputProcessingMode.Erasing;
}
private void pencil(object sender, RoutedEventArgs e)
{
ink_canvas.InkPresenter.InputProcessingConfiguration.Mode =
InkInputProcessingMode.Inking;
}
点击橡皮可以擦掉,但是有些诡异,大家可以自己去写
保存墨迹
FileSavePicker picker = new FileSavePicker
{
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary
}
picker.FileTypeChoices.Add("Gif", new
System.Collections.Generic.List<string> { ".gif" })
//名称
picker.SuggestedFileName = "http://blog.csdn.net/lindexi_gd"
StorageFile file = await picker.PickSaveFileAsync()
if (null != file)
{
try
{
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await ink_canvas.InkPresenter.StrokeContainer.SaveAsync(stream)
}
}
catch (Exception ex)
{
//http://blog.csdn.net/lindexi_gd
}
}
陈染大神的保存
IRandomAccessStream stream = new InMemoryRandomAccessStream();
await InkCanvas.InkPresenter.StrokeContainer.SaveAsync(stream);
var picker = new Windows.Storage.Pickers.FileSavePicker
{
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary
};
picker.FileTypeChoices.Add("INK files", new List<string>() { ".ink" });
var file = await picker.PickSaveFileAsync();
if (file == null) return;
CachedFileManager.DeferUpdates(file);
var bt = await ConvertImagetoByte(stream);
await Windows.Storage.FileIO.WriteBytesAsync(file, bt);
await CachedFileManager.CompleteUpdatesAsync(file);
private async Task<byte[]> ConvertImagetoByte(IRandomAccessStream fileStream)
{
var reader = new Windows.Storage.Streams.DataReader(fileStream.GetInputStreamAt(0));
await reader.LoadAsync((uint)fileStream.Size);
byte[] pixels = new byte[fileStream.Size];
reader.ReadBytes(pixels);
return pixels;
}
保存的东西可以加载
//创建一个文件选择器
var picker = new Windows.Storage.Pickers.FileOpenPicker
{
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary
}
//规定文件类型
picker.FileTypeFilter.Add(".ink")
//显示选择器
var pickedFile = await picker.PickSingleFileAsync()
if (pickedFile != null)
{
var file = await pickedFile.OpenReadAsync()
//加载墨迹
await InkCanvas.InkPresenter.StrokeContainer.LoadAsync(file)
}
手写识别
var container = new InkRecognizerContainer();
var result = await container.RecognizeAsync(InkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All);
var txt = result[0].GetTextCandidates()[0];
手写识别来自http://www.wangchenran.com/win10uwp开发-ink.html
但是我们每次需要使用InkCanvas
需要使用很多按钮,微软给了我们Ink Toolbar
可以简单使用。
首先安装该工具扩展,然后引用InkToolbar Control.dll,接着在View中声明控件:
xmlns:ink="using:Microsoft.Labs.InkToolbarControl"
<ink:InkToolbar x:Name="bar_InkTool"
TargetInkCanvas="{x:Bind InkCanvas}"
VerticalAlignment="Top" HorizontalAlignment="Right" />
TargetInkCanvas
属性bind到要设置的InkCanvas
上即可。
语音
现在很多人都是使用语音输入,把文字转为语音我已经写了一篇博客。
我们需要先有麦克风
首先我们需要设置语言
需要的识别,可以使用web
告诉用户需要输入
Language language = SpeechRecognizer.SystemSpeechLanguage
speechRecognizer = new SpeechRecognizer(language)
// 使用web
SpeechRecognitionTopicConstraint web_search_grammar = new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.WebSearch, "webSearch")
speechRecognizer.Constraints.Add(web_search_grammar)
speechRecognizer.UIOptions.AudiblePrompt = "你想要说什么"
speechRecognizer.UIOptions.ExampleText = "http://blog.csdn.net/lindexi_gd"
SpeechRecognitionCompilationResult compilation_result = await speechRecognizer.CompileConstraintsAsync()
if (compilation_result.Status == SpeechRecognitionResultStatus.Success)
{
// 识别
IAsyncOperation<SpeechRecognitionResult> recognition_operation = speechRecognizer.RecognizeWithUIAsync()
SpeechRecognitionResult speech_recognition_result = await recognition_operation
SpeechRecognitionConfidence confidence = speech_recognition_result.Confidence
string text = speech_recognition_result.Text
}
语音:https://msdn.microsoft.com/zh-cn/library/windows/apps/dn596121.aspx
http://stackoverflow.com/questions/32153880/how-to-render-inkcanvas-to-an-image-in-uwp-windows-10-application/32551620
https://blogs.windows.com/buildingapps/2015/09/08/going-beyond-keyboard-mouse-and-touch-with-natural-input-10-by-10/
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
Win10 UWP 开发教程 课程 资源 80课时 课程地址:http://blog.csdn.net/shanguuncle/article/details/78111649
全选设置之后UWP即可访问localhost,可以走代理。
在本文中,我们将探讨如何利用Windows 10的UWP(通用Windows平台)应用程序与ASP.NET Core构建一个图床服务器的客户端。这是一个涉及到跨平台开发和云端图像存储管理的项目,旨在提供一种高效且灵活的方式来上传和...
下面我们将深入探讨如何在Win10下通过UWP实现这些功能。 首先,我们需要了解UWP(Universal Windows Platform)是微软为Windows 10推出的一种跨设备的应用程序开发框架。它允许开发者编写一次代码,就能在各种...
总结来说,"win10 uwp 轻量级 MVVM 框架入门 2.1.5.3199 例子"提供了一个实际操作的平台,让开发者学习如何在UWP环境中利用MVVM模式进行开发。通过分析和实践这个框架,你将能够更好地理解MVVM的工作原理,以及如何...
在Windows 10 UWP应用开发中,常常需要创建一种用户友好的交互方式,即当用户右键点击某个元素时,能在一个特定的位置显示一个浮出菜单(MenuFlyout)。本篇文章将详细介绍如何使用C#实现这样的功能,使得MenuFlyout...
首先打开 使用微软的账号或 github 账号登陆点击 add new 添加一个 UWP 程序,需要写出 app 的
win10 moblie uwp qq5.6.1150.1000主程序,不含依赖程序
win10 moblie uwp 越飞阅读1.4.68.0主程序,不含依赖程序
title: "win10 uwp 字符文本转语音声音文件方法"在 UWP 中,支持将传入的字符串文本内容转换为音频语音,可以将这个语音声音通过 MediaEl
Windows10 LTSB/C(长期服务版)是目前唯一使用得比较安心的Win10版本. 但是LTSB/C也没了应用商店和UWP运行环境.,LTSC自动恢复win10应用商店,应用商店也是Win10的一大特色! Win10的应用商店也有一些优秀的应用可以代替...
但是LTSB/C也没了应用商店和UWP运行环境.,LTSC自动恢复win10应用商店,应用商店也是Win10的一大特色! Win10的应用商店也有一些优秀的应用可以代替臃肿的桌面程序. 使用该工具即可在 Windows10 LTSC(2019,1809) 上安装...
如果需要反过来,把同步转异步,可以使用 同步方法转异步写你的代码使用Task.Wait 时需要小心死锁不会出现死锁的代码使用Task.Delay等待即使使用方法
【描述】提到的"一个uwp开发源码,可以移植到一切win10系统"意味着该项目遵循了UWP的跨平台特性,使得开发者能够在不同类型的Windows 10设备上部署和运行同一套代码。UWP是微软为了统一Windows生态而推出的新开发...
此安装包为win10的uwp版应用软件Sound Blaster Connect,有需要的朋友可以去下载下来
让UWP可以使用代理
在IT行业中,UWP(Universal Windows Platform)应用是微软为Windows 10及更高版本操作系统设计的一种现代化应用程序框架。这些应用程序具有跨设备兼容性,并且能够利用Windows平台的各种特性和功能。然而,当涉及到...
win10应用商店安装包,Microsoft.WindowsStore_11804.1001.913.0_neutral_~_8wekyb3d8bbwe,可用于不带应用商店的安装
作为核心版的一部分,UWP 现提供了一个可供在每个运行 Windows 10 的设备上使用的通用应用平台。借助此次突破,面向 UWP 的 应用不仅可以调用对所有设备均通用的 WinRT API,还可以调用特定于要运行应用的设备系列的...
微软推出的开源UWP社区工具包(Windows Community Toolkit)是一个关键的资源,它旨在简化和加速开发流程,使得开发者能够更高效地利用Win10 SDK进行编程。 UWP社区工具包是一个集合了各种辅助工具、组件和示例代码...