zoukankan      html  css  js  c++  java
  • Graphics.SetClip 用法介绍

    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.测试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);

            }

    3.运行结果:

    state:1

    state 2:

    state 3:

    state 4:

    state 5:

    state 6:

     state 7:

  • 相关阅读:
    Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++4.2 failed with exit code 1
    Mark !
    delphi 与 C++ 进程之间的命名管道通信
    delphi 获取网页所有链接并访问赚取金币
    char类型转化为string类型 string(int n, char c)
    游戏接入支付宝遇到的一些问题
    mac下versions 提交提示 SVN Working Copy xxx locked
    上周项目遇到的问题
    使用elementPlus组件,分页功能[Pagination]时,字段:total="XXX"时,实际样式显示为 Total {total} 问题的解决办法
    Vue3+Module功能+指定Getter模块+获取不到资源
  • 原文地址:https://www.cnblogs.com/howtrace/p/11491525.html
Copyright © 2011-2022 走看看