翼度科技»论坛 编程开发 .net 查看内容

WPF 基于Geometry的橡皮擦功能

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
这是我大约半年前就想写的随笔。
功能很简单。
就是基于Geometry的画布,记录鼠标轨迹生成PathGeometry。再就是添加删除Path的功能也就是path笔迹删除。
目前是实现了两种方式。
1 基于预览擦除

2 实时擦除

 
 
 
两者在具体技术上没有任何的区别都是依靠Geometry.Combine的A-B图形运算       
也就是A图形中减去B图形并返回一个新的Geometry类型的图形。
同时也都会用上一个GetWidenedPathGeometry的Geometry方法。
这个方法会根据原有的path轨迹并使用一个Pen的笔宽去描绘一个同轨迹的形状。
不过需要注意的是,获取GetWidenedPathGeometry之后绘制这个geometry时不能再使用pen了,如果有必要时则必须要保证新的pen的笔宽小于生成时的笔宽。不然会产生绘制出来的图形全使毛刺的问题
 

 
 
当然这个也是绘制的角有关。
如果使用了一下代码的Pen则会产生另外一种现象。
  1. private Pen _normalPen = new Pen(new SolidColorBrush(Colors.Black), 10)
  2.         {
  3.             StartLineCap = PenLineCap.Round,
  4.             EndLineCap = PenLineCap.Round,
  5.             LineJoin = PenLineJoin.Round,
  6.             MiterLimit = 1
  7.         };
复制代码
 

 
还会有另外一种现象,是毛刺朝内,一直时间想不起来怎么弄了...(待我想起来补图...)
基本原因都是GetWidenedPathGeometry没有处理好的原因。
没怎么放代码,因为如果能需要这个功能,你肯定是缺少思路。很多事情就是差灵光一闪了。
demo中包含画布,画笔,橡皮擦1,橡皮擦2 总共不到400行。
总的来说没啥称之为技术的东西,很多是经验,我下面提供了源代码,可以自己看看。
 
说明:实时擦除部分是直接参考使用wpf技术实现画图工具 - 孤独成派 - 博客园 (cnblogs.com)这位大佬的。
 
源代码下载
 

来源:https://www.cnblogs.com/T-ARF/archive/2022/12/22/16999819.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具