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: