国产探花免费观看_亚洲丰满少妇自慰呻吟_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集合中


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: SHOW| 泸溪县| 屯留县| 阿巴嘎旗| 韩城市| 郯城县| 镇平县| 宽甸| 淳化县| 台北市| 灵丘县| 奉贤区| 清徐县| 九龙坡区| 通山县| 宝山区| 台北县| 榆中县| 桑植县| 扎兰屯市| 巴林左旗| 加查县| 津南区| 洛阳市| 库车县| 准格尔旗| 肃宁县| 阜南县| 思茅市| 正宁县| 辉县市| 孟州市| 永修县| 周口市| 霍林郭勒市| 库伦旗| 遵义县| 盘山县| 邹城市| 隆回县| 静安区|