国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

DrawTool畫筆之圖形筆

2019-11-14 16:06:35
字體:
來源:轉載
供稿:網友

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

12

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

代碼如下:

/// <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集合中


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 墨脱县| 鄂托克旗| 县级市| 阿巴嘎旗| 南皮县| 治多县| 怀集县| 随州市| 定南县| 西贡区| 长治市| 普陀区| 密云县| 平定县| 西畴县| 姚安县| 南陵县| 龙江县| 温泉县| 巴中市| 齐齐哈尔市| 信丰县| 廉江市| 周至县| 远安县| 堆龙德庆县| 扶绥县| 大港区| 微博| 白城市| 白沙| 商都县| 仁化县| 沂南县| 巧家县| 宜春市| 临高县| 武宣县| 登封市| 峨山| 孙吴县|