Graphics.SetClip 用法介紹

1.Graphics 對象作爲GDI+ 圖形繪製接口,其對繪製區域剪輯,經過 SetClip() 方法實現。 測試

比較經常使用 方法如: SetClip(Rectangle, CombineMode)spa

Rectangle :選擇區域範圍3d

CombineMode: Rectangle 所表明區域與Graphics 已選擇範圍之間做用關係,如 交集,並集,或者替換等,詳細介紹:code

public enum CombineMode { //
        // 摘要: // 另外一種將替換爲一個剪輯區域。
        Replace = 0, //
        // 摘要: // 經過採用它們的交集組合兩個剪輯區域。
        Intersect = 1, //
        // 摘要: // 經過採用這二者的 union 組合兩個剪輯區域。
        Union = 2, //
        // 摘要: // 兩個剪輯區域是組合採起相應的區域括起,一項或在其餘區域中,但不是能同時。
        Xor = 3, //
        // 摘要: // 指定正在從現有的區域中刪除的新區域的結果替換爲現有區域。 換言之,從現有區域中排除的新區域。
        Exclude = 4, //
        // 摘要: // 指定正在重新的區域中刪除現有區域的結果替換爲現有區域。 換言之,重新區域中排除現有的區域。
        Complement = 5 }

 

2.測試CombineMode 不一樣類型 效果:對象

private void SetClipRectangleFCombine(PaintEventArgs e) { Graphics newGraphics = e.Graphics; if (state == 1) { //左上角矩形
                newGraphics.SetClip(new Rectangle(0, 0, 100, 100)); } else if (state == 2) { //右下角矩形
                newGraphics.SetClip(new Rectangle(50, 50, 100, 100)); } else if (state == 3) { //經過採用這二者的 union 組合兩個剪輯區域
                newGraphics.SetClip(new Rectangle(50, 50, 100, 100), CombineMode.Replace); newGraphics.SetClip(new Rectangle(0, 80, 100, 100), CombineMode.Union); } else if (state == 4) { //兩個剪輯區域是組合採起相應的區域括起,一項或在其餘區域中,但不是能同時
                newGraphics.SetClip(new Rectangle(50, 50, 100, 100), CombineMode.Replace); newGraphics.SetClip(new Rectangle(0, 80, 100, 100), CombineMode.Xor); } else if (state == 5) { //經過採用它們的交集組合兩個剪輯區域
                newGraphics.SetClip(new Rectangle(50, 50, 100, 100), CombineMode.Replace); newGraphics.SetClip(new Rectangle(0, 80, 100, 100), CombineMode.Intersect); } else if (state == 6) { //指定正在重新的區域中刪除現有區域的結果替換爲現有區域。 換言之,重新區域中排除現有的區域
                newGraphics.SetClip(new Rectangle(50, 50, 100, 100), CombineMode.Replace); newGraphics.SetClip(new Rectangle(0, 80, 100, 100), CombineMode.Complement); } else if (state == 7) { //指定正在從現有的區域中刪除的新區域的結果替換爲現有區域。 換言之,從現有區域中排除的新區域
                newGraphics.SetClip(new Rectangle(50, 50, 100, 100), CombineMode.Replace); newGraphics.SetClip(new Rectangle(0, 80, 100, 100), CombineMode.Exclude); } e.Graphics.FillRectangle(new SolidBrush(Color.Black), 0, 0, 500, 500);

             //恢復Clip 爲無限區域,從新繪製
             //e.Graphics.ResetClip();
             //e.Graphics.FillRectangle(new SolidBrush(Color.Black), 75, 75 , 200, 200);blog

 }

 

3.運行結果:接口

state:1ip

 

 

state 2:io

 

 

state 3:class

 

 

state 4:

 

 

state 5:

 

 

state 6:

 

 

 state 7:

相關文章
相關標籤/搜索