C# GDI+ 利用 Rectangle GraphicsPath 判断 矩形或多边形 图形关系_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C# GDI+ 利用 Rectangle GraphicsPath 判断 矩形或多边形 图形关系

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

 2014/4/14 12:04:11  GISER_U  博客园  我要评论(0)
  • 摘要:最近在做一些简单的图像对比工作,总结了一些GDI+对象的使用方式,记录下来共享给大家使用。判断Rectangl与多边形的关系///<summary>///是否包含输入范围///</summary>///<paramname="rectangle">要对比的范围</param>///<paramname="scale">当前模型对比比例,如放大一倍、缩小一倍等,默认是1</param>///<returns>
  • 标签:C# 关系 利用

最近在做一些简单的图像对比工作,总结了一些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;
            }
        }

希望对大家有用:)

发表评论
用户名: 匿名