首页 > 其他 > 详细

Graphics.SetClip 用法介绍

时间:2019-09-09 15:21:47      阅读:80      评论:0      收藏:0      [点我收藏+]

1.Graphics 对象做为GDI+ 图形绘制接口,其对绘制区域剪辑,通过 SetClip() 方法实现。 

比较常用 方法如: SetClip(Rectangle, CombineMode)

Rectangle :选择区域范围

CombineMode: Rectangle 所代表区域与Graphics 已选择范围之间作用关系,如 交集,并集,或者替换等,详细介绍:

 public enum CombineMode
    {
        //
        // 摘要:
        //     另一种将替换为一个剪辑区域。
        Replace = 0,
        //
        // 摘要:
        //     通过采用它们的交集组合两个剪辑区域。
        Intersect = 1,
        //
        // 摘要:
        //     通过采用这两者的 union 组合两个剪辑区域。
        Union = 2,
        //
        // 摘要:
        //     两个剪辑区域是组合采取相应的区域括起,一项或在其他区域中,但不是能同时。
        Xor = 3,
        //
        // 摘要:
        //     指定正在从现有的区域中删除的新区域的结果替换为现有区域。 换言之,从现有区域中排除的新区域。
        Exclude = 4,
        //
        // 摘要:
        //     指定正在从新的区域中删除现有区域的结果替换为现有区域。 换言之,从新区域中排除现有的区域。
        Complement = 5
    }

 

2.如示例代码:

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

        }

 

3.运行结果:

state:1

技术分享图片

 

 

state 2:

技术分享图片

 

 

state 3:

技术分享图片

 

 

state 4:

技术分享图片

 

 

state 5:

技术分享图片

 

 

state 6:

技术分享图片

 

 

 state 7:

技术分享图片

 

Graphics.SetClip 用法介绍

原文:https://www.cnblogs.com/howtrace/p/11491525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!