日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DrawTool画笔之图形笔

發布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DrawTool画笔之图形笔 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相關知識參考DrawTool畫筆之紋理筆? , 圖形筆的實現跟紋理筆的實現是一樣的,重載Stroke的DrawCore方法,效果圖:

------------------------------------------------------------

代碼如下:

/// <summary>/// 圖形筆/// </summary>public class ImageStroke : Stroke{private string imageFile_;private System.Windows.Media.ImageSource imageSource_;private Point curPoint;public ImageStroke(System.Windows.Input.StylusPointCollection points, DrawingAttributes da, string file): base(points, da){this.imageFile_ = file;this.imageSource_ = new System.Windows.Media.Imaging.BitmapImage(new Uri( this.imageFile_));}protected override void DrawCore(System.Windows.Media.DrawingContext drawingContext, DrawingAttributes drawingAttributes){double num = drawingAttributes.Width + 20.0;System.Windows.Media.StreamGeometry streamGeometry = new System.Windows.Media.StreamGeometry();using (System.Windows.Media.StreamGeometryContext streamGeometryContext = streamGeometry.Open()){streamGeometryContext.BeginFigure((Point)base.StylusPoints[0], false, false);drawingContext.DrawImage(this.imageSource_, new Rect(((Point)base.StylusPoints[0]).X - num / 2.0, ((Point)base.StylusPoints[0]).Y - num / 2.0, num, num));this.curPoint = (Point)base.StylusPoints[0];foreach (System.Windows.Input.StylusPoint current in base.StylusPoints){ImageStroke.DrawImage(ref this.curPoint, (Point)current, num, drawingContext, this.imageSource_);}}}public static double GetDistance(Point a, Point b){return System.Math.Abs(Point.Subtract(a, b).Length);}public static Point GetPointBetween(Point a, Point b, double len){Vector vector = Point.Subtract(a, b);vector.Normalize();vector = Vector.Multiply(vector, len);return Point.Subtract(a, vector);}public static void DrawImage(ref Point a, Point b, double width, System.Windows.Media.DrawingContext drawingContext, System.Windows.Media.ImageSource imageSource){for (double distance = ImageStroke.GetDistance(a, b); distance >= width; distance = ImageStroke.GetDistance(a, b)){Point pointBetween = ImageStroke.GetPointBetween(a, b, width);drawingContext.DrawImage(imageSource, new Rect(pointBetween.X - width / 2.0, pointBetween.Y - width / 2.0, width, width));a = pointBetween;}}}

?

?

實例應用可以參考紋理筆,在生成stroke對象時候使用ImageStroke然后將stroke添加到inkcanvas的strokes集合中

轉載于:https://www.cnblogs.com/andy1987/p/4349677.html

總結

以上是生活随笔為你收集整理的DrawTool画笔之图形笔的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。