這是我大約半年前就想寫的隨筆,
功能很簡單,
就是基于Geometry的畫布,記錄滑鼠軌跡生成PathGeometry,再就是添加洗掉Path的功能也就是path筆跡洗掉,
目前是實作了兩種方式,
1 基于預覽擦除
2 實時擦除
兩者在具體技術上沒有任何的區別都是依靠Geometry.Combine的A-B圖形運算
也就是A圖形中減去B圖形并回傳一個新的Geometry型別的圖形,
同時也都會用上一個GetWidenedPathGeometry的Geometry方法,
這個方法會根據原有的path軌跡并使用一個Pen的筆寬去描繪一個同軌跡的形狀,
不過需要注意的是,獲取GetWidenedPathGeometry之后繪制這個geometry時不能再使用pen了,如果有必要時則必須要保證新的pen的筆寬小于生成時的筆寬,不然會產生繪制出來的圖形全使毛刺的問題,
當然這個也是繪制的角有關,
如果使用了一下代碼的Pen則會產生另外一種現象,
private Pen _normalPen = new Pen(new SolidColorBrush(Colors.Black), 10) { StartLineCap = PenLineCap.Round, EndLineCap = PenLineCap.Round, LineJoin = PenLineJoin.Round, MiterLimit = 1 };
還會有另外一種現象,是毛刺朝內,一直時間想不起來怎么弄了...(待我想起來補圖...)
基本原因都是GetWidenedPathGeometry沒有處理好的原因,
沒怎么放代碼,因為如果能需要這個功能,你肯定是缺少思路,很多事情就是差靈光一閃了,
demo中包含畫布,畫筆,橡皮擦1,橡皮擦2 總共不到400行,
總的來說沒啥稱之為技術的東西,很多是經驗,我下面提供了源代碼,可以自己看看,
說明:實時擦除部分是直接參考使用wpf技術實作畫圖工具 - 孤獨成派 - 博客園 (cnblogs.com)這位大佬的,
源代碼下載
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/540567.html
標籤:WPF