最近在做一些簡單的圖像對比工作,總結了一些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; } }
希望對大家有用:)