编程中inc是什么意思
编程中Ink的使用及实现方法
Ink是指基于手写和手势的界面交互方式,它是现代应用程序中越来越流行的一种交互方式。在编程中,Ink可以用于实现手写笔记、绘图、手写签名等功能。本文将介绍Ink的使用及实现方法。
一、Ink的介绍
Ink是指用户在屏幕上使用手写笔或触控笔进行绘图、写字、手势等操作,系统将其转换成数字信号后,进行分析和处理。Ink在数字化学习、数字签名、电子表格、CAD、艺术绘画等领域都有广泛的应用。
二、Ink的使用
在UWP开发中,Ink可以通过InkCanvas实现。InkCanvas是一个继承自Canvas的控件,它提供了绘图板的基本交互功能,如绘图、撤销、重做、清空、识别等。
1. 创建InkCanvas
通过以下代码可以创建一个InkCanvas:
```xaml
```
2. 设置InkCanvas属性
InkCanvas的主要属性有:
InkPresenter:InkCanvas中的InkPresenter负责处理Ink的输入、处理和输出。
InkPresenter.InputDeviceTypes:设置InkCanvas支持的设备类型,包括鼠标、手写笔等。
InkPresenter.StrokeContainer:InkPresenter中的StrokeContainer包含了InkCanvas中所有的Stroke。
InkPresenter.CopyDefaultDrawingAttributes():获取InkCanvas中默认的绘制属性。
例如,以下代码设置了InkCanvas支持鼠标和手写笔,并获取了默认的绘制属性:
```c
InkCanvas inkCanvas = new InkCanvas();
InkDrawingAttributes drawingAttributes = inkCanvas.InkPresenter.CopyDefaultDrawingAttributes();
inkCanvas.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Pen;
```
3. 保存和加载Ink
InkCanvas中的InkPresenter.StrokeContainer包含了所有InkCanvas中的Stroke。可以通过以下代码保存和加载Ink。
保存Ink:
```c
StorageFile file = await KnownFolders.PicturesLibrary.CreateFileAsync("ink.png", CreationCollisionOption.ReplaceExisting);
if (file != null)
{
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await inkCanvas.InkPresenter.StrokeContainer.SaveAsync(stream);
stream.GetOutputStreamAt(0).FlushAsync();
}
}
```
加载Ink:

```c
StorageFile file = await KnownFolders.PicturesLibrary.GetFileAsync("ink.png");
if (file != null)
{
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
{
await inkCanvas.InkPresenter.StrokeContainer.LoadAsync(stream);
}
}
```
三、Ink的实现方法
Ink的实现包括Ink的输入、处理和输出三个方面。
1. Ink的输入
Ink的输入包括用户对手写板或触控屏的手写、手势等操作。
例如,以下代码实现了当用户在InkCanvas上手写时,将手写内容添加到StrokeContainer中:
```c
inkCanvas.InkPresenter.StrokesCollected = (sender, args) =>
{
var stroke = args.Strokes.FirstOrDefault();
if (stroke != null)
{
inkCanvas.InkPresenter.StrokeContainer.AddStroke(stroke.Clone());
}
};
```
2. Ink的处理
Ink的处理包括对手写笔迹的识别、转换等操作。
例如,以下代码实现了对手写数字的识别:
```c
using Windows.AI.MachineLearning.Preview;
private LearningModelPreview learningModel;
private LearningModelBindingPreview learningModelBinding;
async void LoadModel()
{
// 加载模型
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("msappx:///Handwriting.onnx"));
learningModel = await LearningModelPreview.LoadModelFromStorageFileAsync(file);
// 创建绑定对象
learningModelBinding = new LearningModelBindingPreview(learningModel);
}
void Recognize(InkStroke stroke)
{
// 将InkStroke转换为数字图像
SoftwareBitmap bitmap = new SoftwareBitmap(BitmapPixelFormat.Bgra8, 28, 28, BitmapAlphaMode.Premultiplied);
using (var rasterStream = InkStrokeHelper.CreateStrokeBitmap(stroke, Colors.Black, bitmap))
{
await rasterStream.FlushAsync();
}
// 进行数字识别
learningModelBinding.Bind("Input3", VideoFrame.CreateWithSoftwareBitmap(bitmap));
var results = await learningModel.EvaluateAsync(learningModelBinding, "");
// 输出识别结果
float[] output = results.Outputs["Plus214_Output_0"].GetAsVectorView().ToArray();
int digit = Array.IndexOf(output, output.Max());
Debug.WriteLine("Recognized digit: " digit);
}
```
3. Ink的输出
Ink的输出包括将手写笔迹显示在屏幕上、保存为图片等操作。
例如,以下代码实现了将InkCanvas上的笔迹保存为图片:
```c
StorageFile file = await KnownFolders.PicturesLibrary.CreateFileAsync("ink.png", CreationCollisionOption.ReplaceExisting);
if (file != null)
{
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await inkCanvas.InkPresenter.StrokeContainer.SaveAsync(stream);
stream.GetOutputStreamAt(0).FlushAsync();
}
}
```
四、总结
Ink是一种基于手写和手势的界面交互方式,在UWP开发中可以通过InkCanvas实现。实现Ink的关键是对手写笔迹的输入、处理和输出三个方面进行合理的设计和实现。
本文 新鼎系統网 原创,转载保留链接!网址:https://acs-product.com/post/26982.html
免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,谢谢!联系QQ:2760375052 版权所有:新鼎系統网沪ICP备2023024866号-15