最近在做一些简单的图像对比工作,总结了一些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 = ; i < ys.Length; i++)
{
//当前点和下一点不为空
if (!string.IsNullOrEmpty(ys[i]) && !string.IsNullOrEmpty(xs[i]) && !string.IsNullOrEmpty(ys[i+]) && !string.IsNullOrEmpty(xs[i+]))
{ gp.AddLine((int)(int.Parse(xs[i]) * scale), (int)(int.Parse(ys[i]) * scale), (int)(int.Parse(xs[i + ]) * scale),
(int)(int.Parse(ys[i + ]) * 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;
}
}

希望对大家有用:)

05-08 08:42