在 WPF 中实现画笔非常简单,基于 InkCanvas 可以实现各种笔形的绘图,以及图形擦除。
备注:很多早期的 WPF 文章基于 InkPresenter 实现,基本上是说 Winphone 平台,在 Win10 中 InkPresenter 相关代码可以编译,但是运行没有效果,应该用 InkCanvas 替代,他们的接口是一样的。
在 InkCanvas 的绘图模型中,笔迹(或者墨迹)通过 Stroke (一笔,一划)组织,一个 Stroke 包含一个个 StylusPointCollection (笔迹集)和一个 DrawingAttributes (笔形)。StylusPointCollection 包含多个 StylusPoint (笔迹)。
InkCanvas 的使用方法如下:(注意不能透明 Opacity=”1″)
<InkCanvas Grid.Row="1" Grid.Column="1" x:Name="inkCanvas" Height="500" Width="600"
PreviewMouseDown="inkCanvas_MouseLeftButtonDown"
LostMouseCapture="inkCanvas_LostMouseCapture"
MouseMove="inkCanvas_MouseMove"
Opacity="1">
</InkCanvas>
下面的代码片段将捕获的笔迹(鼠标位置)转换为 StylusPoint,并加入到 StylusPointCollection 中。
StylusPointCollection stylusPointCollection = new StylusPointCollection();
Point pt = e.GetPosition(inkCanvas);
stylusPointCollection.Add(new StylusPoint(pt.X, pt.Y));
//stylusPointCollection.Add(e.StylusDevice.GetStylusPoints(inkCanvas));
在电脑上通过鼠标模拟画笔,因为没有画笔硬件设备,所以 StylusDevice (画笔设备)为 NULL,不能通过 GetStylusPoints 获取 StylusPoint (上面注释掉的代码)。
后续内容:
- 实现删除笔迹
- 捕获触摸板事件
- 实现多点触摸
- 提高响应性能
参考资料:
版权声明:本文为luansxx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。