zoukankan      html  css  js  c++  java
  • 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;
                }
            }

    希望对大家有用:)

  • 相关阅读:
    httpd.conf详细解释
    centos 6 编译安装php-5.4/5.5(lamp模式)
    apache的动态和静态
    Apache Prefork、Worker和Event三种MPM分析
    如何使用apache的 work模式还是 prefork 模式
    apache的扩展模块安装
    apache 启动脚本加入系统服务列表
    MYSQL5.5源码安装 linux下
    LAMP第一部分-环境搭建
    I2C驱动详解
  • 原文地址:https://www.cnblogs.com/aoldman/p/3663516.html
Copyright © 2011-2022 走看看