编程中inc是什么意思

admin 阅读:190 2024-05-26 04:54:13 评论:0

编程中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

最近发表