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;
            }
        }

希望對大家有用:)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM