首页 > 学院 > 开发设计 > 正文

C# GDI+ 利用 Rectangle GraphicsPath 判断 矩形或多边形 图形关系

2019-11-17 03:14:00
字体:
来源:转载
供稿:网友

C# GDI+ 利用 Rectangle GraphicsPath 判断 矩形或多边形 图形关系

最近在做一些简单的图像对比工作,总结了一些GDI+对象的使用方式,记录下来共享给大家使用。

判断Rectangl与多边形的关系

  /// <summary>        /// 是否包含输入范围        /// </summary>        /// <param name="rectangle">要对比的范围</param>        /// <param name="scale">当前模型对比比例,如放大一倍、缩小一倍等,默认是1</param>        /// <returns></returns>        public bool Contains(Rectangle rectangle, double scale)        {            try            {//按照比例缩放当前模型范围                var ys = PtsYArray;                var xs = PtsXArray;                            var gp = new GraphicsPath();                gp.StartFigure();                for (int i = 0; i < ys.Length; i++)                {                    //当前点和下一点不为空                    if (!string.IsNullOrEmpty(ys[i]) && !string.IsNullOrEmpty(xs[i]) && !string.IsNullOrEmpty(ys[i+1]) && !string.IsNullOrEmpty(xs[i+1]))                    {                        gp.AddLine((int)(int.Parse(xs[i]) * scale), (int)(int.Parse(ys[i]) * scale), (int)(int.Parse(xs[i + 1]) * scale),                                   (int)(int.Parse(ys[i + 1]) * scale));                    }                    else                    {                        gp.CloseFigure();                        break;                    }                }                var rg = new Region(gp);               return rg.IsVisible(rectangle);            }            catch            {                return false;            }        }

判断Rectangl与Rectangl的关系

  /// <summary>        /// 是否包含输入范围        /// </summary>        /// <param name="rectangle">要对比的范围</param>        /// <param name="scale">当前模型对比比例,如放大一倍、缩小一倍等,默认是1</param>        /// <returns></returns>        public bool Contains(Rectangle rectangle, double scale)        {            try            {//按照比例缩放当前模型范围                var rectangle2 = new Rectangle((int) (int.Parse(X)*scale), (int) (int.Parse(Y)*scale),                                               (int) (int.Parse(xR)*scale), (int) (int.Parse(yR)*scale));                return rectangle.IntersectsWith(rectangle2);//对比两个最大外包是否有包含关系            }            catch             {                return false;            }        }

希望对大家有用:)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表