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;
            }
        }
复制代码

希望对大家有用:)

posted @   ZN大叔  阅读(6958)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示