WPF 开发 —— 画笔,墨迹渲染(InkCanvas)

7 篇文章 0 订阅

在 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 (上面注释掉的代码)。

后续内容:

  1. 实现删除笔迹
  2. 捕获触摸板事件
  3. 实现多点触摸
  4. 提高响应性能

参考资料:

  1. 利用WPF InkCanvas水墨控件圈选移动笔画
  2. #481 – 在InkCanvas 上使用鼠标绘图(You Can Draw On an InkCanvas Control with the Mouse)
  3. WPF InkCanvas MouseDown及MouseLeftButtonDown事件不触发的代替事件
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值