(win8)使用 InkManager 保存手势到图片

Windows.UI.Input.Inking  InkManager 类 提供管理输入、操作以及处理(包括手写识别)一个或多个 InkStroke 对象的属性和方法。

最近想做一个win8上的画板程序,使用path绘制,手势经过的点,添加到目标控件后,页面是有效果了,但是win8中的 writealbebitmap 和wp中的 提供的构造方法不同,将控件传入,然后生成的的构造方法被阉割了。

所以在当时陷入怪圈,想着怎么去把屏幕截下来。

后来听到别人的指点,使用InkManager可能有效果,然后自己去看了下,发现果然可以使用了。

大概说下使用:

初始化方法:

InkManager m_InkManager = new Windows.UI.Input.Inking.InkManager();

可能需要注册的事件有这些:


//
// 摘要:
// 进行接触的指针异常地失去接触时发生。
public event PointerEventHandler PointerCanceled;
//
// 摘要:
// 在此元素以前保存的指针捕获移动到另一个元素或在其他地方时发生。
public event PointerEventHandler PointerCaptureLost;
//
// 摘要:
// 在指针进入此元素的命中测试区域时发生。
public event PointerEventHandler PointerEntered;
//
// 摘要:
// 在指针保留此元素的命中测试区域时发生。
public event PointerEventHandler PointerExited;
//
// 摘要:
// 在移动指针(指针仍在此元素的命中测试区内)时发生。
public event PointerEventHandler PointerMoved;
//
// 摘要:
// 当指针设备在此元素内启动 Press 操作时发生。
public event PointerEventHandler PointerPressed;
//
// 摘要:
// 在此元素内释放先前启动 Press 操作的指针设备时发生。
public event PointerEventHandler PointerReleased;
//
// 摘要:
// 当指针轮的的增量值更改时发生。
public event PointerEventHandler PointerWheelChanged;

在注册事件中 (object sender, PointerRoutedEventArgs e)

获取当前位置

 Windows.UI.Input.PointerPoint pt = e.GetCurrentPoint(InkCanvas);

将位置加入管理中
m_InkManager.ProcessPointerUp(pt);

pt.Position 获取当前点 可以通过这个 加入path中,在页面上展示绘制的图形

记录当前点到path 的集合中

LineSegment _LineSegment = new LineSegment();

_LineSegment.Point = pt.Position;
_PathSegmentCollection.Add(_LineSegment);

初始化path,添加path到页面 这样就可以自动的将图像绘制在页面上

_PathGeometry = new PathGeometry();
_PathFigure = new PathFigure();
_PathFigureCollection = new PathFigureCollection();
_PathSegmentCollection = new PathSegmentCollection();

_PathFigure.StartPoint = pt.Position;
_PathFigure.Segments = _PathSegmentCollection;
_PathFigureCollection.Add(_PathFigure);
_PathGeometry.Figures = _PathFigureCollection;

_Path.Data = _PathGeometry;


InkCanvas.Children.Add(_Path);

最后重头戏  把绘制的图保存下来

Windows.Storage.Pickers.FileSavePicker save = new Windows.Storage.Pickers.FileSavePicker();
save.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
save.DefaultFileExtension = ".png";
save.FileTypeChoices.Add("PNG", new string[] { ".png" });
StorageFile filesave = await save.PickSaveFileAsync();
using (IOutputStream ab = await filesave.OpenAsync(FileAccessMode.ReadWrite))
{
if (ab != null)
await m_InkManager.SaveAsync(ab);
}

原文地址:https://www.cnblogs.com/liumianweifeng/p/3143424.html