C#GDI+阴影笔刷样式HatchStyle探讨

发布时间 2023-07-12 16:06:10作者: soulsjie

命名空间:System.Drawing.Drawing2D.HatchBrush

在创建笔刷时,需要传入参数

1.阴影样式HatchStyle

2.前景色

3.背景色

Brush brs1 = new HatchBrush(参数1,参数2, 参数3);

参数1中HatchStyle为枚举值,且枚举很多有0-52,突发奇想,想试试每种笔刷的效果,结果如下,可供参考:

测试代码,使用循环生成枚举笔刷绘制:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            string code = GetAllBrushCode();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Point start = new Point(50, 50);
            Point end = new Point(300, 50);
            //前景色
            Color color1 = Color.Blue;
            //背景色
            Color color2 = Color.Yellow;
            //每根线之间的间距
            int margin = 10;
            //每个笔刷的宽度
            int pwidth = 10;
            //笔刷
            //1.颜色笔刷
            Brush br1 = new SolidBrush(Color.Black);
            Pen p1 = new Pen(br1, pwidth);
            g.DrawLine(p1, NewPoint(start, 0), NewPoint(end, 0));
            //2.阴影画刷
            //复制code生成的代码开始
            //样式1
            Brush brs1 = new HatchBrush((HatchStyle)0, color1, color2);
            Pen ps1 = new Pen(brs1, pwidth);
            g.DrawLine(ps1, NewPoint(start, 22), NewPoint(end, 22));
            g.DrawString("HatchStyle.Horizontal", new Font("微软雅黑", 8), br1, NewPoint(end, 23));
            //样式2
            Brush brs2 = new HatchBrush((HatchStyle)1, color1, color2);
            Pen ps2 = new Pen(brs2, pwidth);
            g.DrawLine(ps2, NewPoint(start, 44), NewPoint(end, 44));
            g.DrawString("HatchStyle.Vertical", new Font("微软雅黑", 8), br1, NewPoint(end, 46));
            //样式3
            Brush brs3 = new HatchBrush((HatchStyle)2, color1, color2);
            Pen ps3 = new Pen(brs3, pwidth);
            g.DrawLine(ps3, NewPoint(start, 66), NewPoint(end, 66));
            g.DrawString("HatchStyle.ForwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 69));
            //样式4
            Brush brs4 = new HatchBrush((HatchStyle)3, color1, color2);
            Pen ps4 = new Pen(brs4, pwidth);
            g.DrawLine(ps4, NewPoint(start, 88), NewPoint(end, 88));
            g.DrawString("HatchStyle.BackwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 92));
            //样式5
            Brush brs5 = new HatchBrush((HatchStyle)4, color1, color2);
            Pen ps5 = new Pen(brs5, pwidth);
            g.DrawLine(ps5, NewPoint(start, 110), NewPoint(end, 110));
            g.DrawString("HatchStyle.LargeGrid", new Font("微软雅黑", 8), br1, NewPoint(end, 115));
            //样式6
            Brush brs6 = new HatchBrush((HatchStyle)5, color1, color2);
            Pen ps6 = new Pen(brs6, pwidth);
            g.DrawLine(ps6, NewPoint(start, 132), NewPoint(end, 132));
            g.DrawString("HatchStyle.DiagonalCross", new Font("微软雅黑", 8), br1, NewPoint(end, 138));
            //样式7
            Brush brs7 = new HatchBrush((HatchStyle)6, color1, color2);
            Pen ps7 = new Pen(brs7, pwidth);
            g.DrawLine(ps7, NewPoint(start, 154), NewPoint(end, 154));
            g.DrawString("HatchStyle.Percent05", new Font("微软雅黑", 8), br1, NewPoint(end, 161));
            //样式8
            Brush brs8 = new HatchBrush((HatchStyle)7, color1, color2);
            Pen ps8 = new Pen(brs8, pwidth);
            g.DrawLine(ps8, NewPoint(start, 176), NewPoint(end, 176));
            g.DrawString("HatchStyle.Percent10", new Font("微软雅黑", 8), br1, NewPoint(end, 184));
            //样式9
            Brush brs9 = new HatchBrush((HatchStyle)8, color1, color2);
            Pen ps9 = new Pen(brs9, pwidth);
            g.DrawLine(ps9, NewPoint(start, 198), NewPoint(end, 198));
            g.DrawString("HatchStyle.Percent20", new Font("微软雅黑", 8), br1, NewPoint(end, 207));
            //样式10
            Brush brs10 = new HatchBrush((HatchStyle)9, color1, color2);
            Pen ps10 = new Pen(brs10, pwidth);
            g.DrawLine(ps10, NewPoint(start, 220), NewPoint(end, 220));
            g.DrawString("HatchStyle.Percent25", new Font("微软雅黑", 8), br1, NewPoint(end, 230));
            //样式11
            Brush brs11 = new HatchBrush((HatchStyle)10, color1, color2);
            Pen ps11 = new Pen(brs11, pwidth);
            g.DrawLine(ps11, NewPoint(start, 242), NewPoint(end, 242));
            g.DrawString("HatchStyle.Percent30", new Font("微软雅黑", 8), br1, NewPoint(end, 253));
            //样式12
            Brush brs12 = new HatchBrush((HatchStyle)11, color1, color2);
            Pen ps12 = new Pen(brs12, pwidth);
            g.DrawLine(ps12, NewPoint(start, 264), NewPoint(end, 264));
            g.DrawString("HatchStyle.Percent40", new Font("微软雅黑", 8), br1, NewPoint(end, 276));
            //样式13
            Brush brs13 = new HatchBrush((HatchStyle)12, color1, color2);
            Pen ps13 = new Pen(brs13, pwidth);
            g.DrawLine(ps13, NewPoint(start, 286), NewPoint(end, 286));
            g.DrawString("HatchStyle.Percent50", new Font("微软雅黑", 8), br1, NewPoint(end, 299));
            //样式14
            Brush brs14 = new HatchBrush((HatchStyle)13, color1, color2);
            Pen ps14 = new Pen(brs14, pwidth);
            g.DrawLine(ps14, NewPoint(start, 308), NewPoint(end, 308));
            g.DrawString("HatchStyle.Percent60", new Font("微软雅黑", 8), br1, NewPoint(end, 322));
            //样式15
            Brush brs15 = new HatchBrush((HatchStyle)14, color1, color2);
            Pen ps15 = new Pen(brs15, pwidth);
            g.DrawLine(ps15, NewPoint(start, 330), NewPoint(end, 330));
            g.DrawString("HatchStyle.Percent70", new Font("微软雅黑", 8), br1, NewPoint(end, 345));
            //样式16
            Brush brs16 = new HatchBrush((HatchStyle)15, color1, color2);
            Pen ps16 = new Pen(brs16, pwidth);
            g.DrawLine(ps16, NewPoint(start, 352), NewPoint(end, 352));
            g.DrawString("HatchStyle.Percent75", new Font("微软雅黑", 8), br1, NewPoint(end, 368));
            //样式17
            Brush brs17 = new HatchBrush((HatchStyle)16, color1, color2);
            Pen ps17 = new Pen(brs17, pwidth);
            g.DrawLine(ps17, NewPoint(start, 374), NewPoint(end, 374));
            g.DrawString("HatchStyle.Percent80", new Font("微软雅黑", 8), br1, NewPoint(end, 391));
            //样式18
            Brush brs18 = new HatchBrush((HatchStyle)17, color1, color2);
            Pen ps18 = new Pen(brs18, pwidth);
            g.DrawLine(ps18, NewPoint(start, 396), NewPoint(end, 396));
            g.DrawString("HatchStyle.Percent90", new Font("微软雅黑", 8), br1, NewPoint(end, 414));
            //样式19
            Brush brs19 = new HatchBrush((HatchStyle)18, color1, color2);
            Pen ps19 = new Pen(brs19, pwidth);
            g.DrawLine(ps19, NewPoint(start, 418), NewPoint(end, 418));
            g.DrawString("HatchStyle.LightDownwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 437));
            //样式20
            Brush brs20 = new HatchBrush((HatchStyle)19, color1, color2);
            Pen ps20 = new Pen(brs20, pwidth);
            g.DrawLine(ps20, NewPoint(start, 440), NewPoint(end, 440));
            g.DrawString("HatchStyle.LightUpwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 460));
            //样式21
            Brush brs21 = new HatchBrush((HatchStyle)20, color1, color2);
            Pen ps21 = new Pen(brs21, pwidth);
            g.DrawLine(ps21, NewPoint(start, 462), NewPoint(end, 462));
            g.DrawString("HatchStyle.DarkDownwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 483));
            //样式22
            Brush brs22 = new HatchBrush((HatchStyle)21, color1, color2);
            Pen ps22 = new Pen(brs22, pwidth);
            g.DrawLine(ps22, NewPoint(start, 484), NewPoint(end, 484));
            g.DrawString("HatchStyle.DarkUpwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 506));
            //样式23
            Brush brs23 = new HatchBrush((HatchStyle)22, color1, color2);
            Pen ps23 = new Pen(brs23, pwidth);
            g.DrawLine(ps23, NewPoint(start, 506), NewPoint(end, 506));
            g.DrawString("HatchStyle.WideDownwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 529));
            //样式24
            Brush brs24 = new HatchBrush((HatchStyle)23, color1, color2);
            Pen ps24 = new Pen(brs24, pwidth);
            g.DrawLine(ps24, NewPoint(start, 528), NewPoint(end, 528));
            g.DrawString("HatchStyle.WideUpwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 552));
            //样式25
            Brush brs25 = new HatchBrush((HatchStyle)24, color1, color2);
            Pen ps25 = new Pen(brs25, pwidth);
            g.DrawLine(ps25, NewPoint(start, 550), NewPoint(end, 550));
            g.DrawString("HatchStyle.LightVertical", new Font("微软雅黑", 8), br1, NewPoint(end, 575));
            //样式26
            Brush brs26 = new HatchBrush((HatchStyle)25, color1, color2);
            Pen ps26 = new Pen(brs26, pwidth);
            g.DrawLine(ps26, NewPoint(start, 572), NewPoint(end, 572));
            g.DrawString("HatchStyle.LightHorizontal", new Font("微软雅黑", 8), br1, NewPoint(end, 598));
            //样式27
            Brush brs27 = new HatchBrush((HatchStyle)26, color1, color2);
            Pen ps27 = new Pen(brs27, pwidth);
            g.DrawLine(ps27, NewPoint(start, 594), NewPoint(end, 594));
            g.DrawString("HatchStyle.NarrowVertical", new Font("微软雅黑", 8), br1, NewPoint(end, 621));
            //样式28
            Brush brs28 = new HatchBrush((HatchStyle)27, color1, color2);
            Pen ps28 = new Pen(brs28, pwidth);
            g.DrawLine(ps28, NewPoint(start, 616), NewPoint(end, 616));
            g.DrawString("HatchStyle.NarrowHorizontal", new Font("微软雅黑", 8), br1, NewPoint(end, 644));
            //样式29
            Brush brs29 = new HatchBrush((HatchStyle)28, color1, color2);
            Pen ps29 = new Pen(brs29, pwidth);
            g.DrawLine(ps29, NewPoint(start, 638), NewPoint(end, 638));
            g.DrawString("HatchStyle.DarkVertical", new Font("微软雅黑", 8), br1, NewPoint(end, 667));
            //样式30
            Brush brs30 = new HatchBrush((HatchStyle)29, color1, color2);
            Pen ps30 = new Pen(brs30, pwidth);
            g.DrawLine(ps30, NewPoint(start, 660), NewPoint(end, 660));
            g.DrawString("HatchStyle.DarkHorizontal", new Font("微软雅黑", 8), br1, NewPoint(end, 690));
            //样式31
            Brush brs31 = new HatchBrush((HatchStyle)30, color1, color2);
            Pen ps31 = new Pen(brs31, pwidth);
            g.DrawLine(ps31, NewPoint(start, 682), NewPoint(end, 682));
            g.DrawString("HatchStyle.DashedDownwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 713));
            //样式32
            Brush brs32 = new HatchBrush((HatchStyle)31, color1, color2);
            Pen ps32 = new Pen(brs32, pwidth);
            g.DrawLine(ps32, NewPoint(start, 704), NewPoint(end, 704));
            g.DrawString("HatchStyle.DashedUpwardDiagonal", new Font("微软雅黑", 8), br1, NewPoint(end, 736));
            //样式33
            Brush brs33 = new HatchBrush((HatchStyle)32, color1, color2);
            Pen ps33 = new Pen(brs33, pwidth);
            g.DrawLine(ps33, NewPoint(start, 726), NewPoint(end, 726));
            g.DrawString("HatchStyle.DashedHorizontal", new Font("微软雅黑", 8), br1, NewPoint(end, 759));
            //样式34
            Brush brs34 = new HatchBrush((HatchStyle)33, color1, color2);
            Pen ps34 = new Pen(brs34, pwidth);
            g.DrawLine(ps34, NewPoint(start, 748), NewPoint(end, 748));
            g.DrawString("HatchStyle.DashedVertical", new Font("微软雅黑", 8), br1, NewPoint(end, 782));
            //样式35
            Brush brs35 = new HatchBrush((HatchStyle)34, color1, color2);
            Pen ps35 = new Pen(brs35, pwidth);
            g.DrawLine(ps35, NewPoint(start, 770), NewPoint(end, 770));
            g.DrawString("HatchStyle.SmallConfetti", new Font("微软雅黑", 8), br1, NewPoint(end, 805));
            //样式36
            Brush brs36 = new HatchBrush((HatchStyle)35, color1, color2);
            Pen ps36 = new Pen(brs36, pwidth);
            g.DrawLine(ps36, NewPoint(start, 792), NewPoint(end, 792));
            g.DrawString("HatchStyle.LargeConfetti", new Font("微软雅黑", 8), br1, NewPoint(end, 828));
            //样式37
            Brush brs37 = new HatchBrush((HatchStyle)36, color1, color2);
            Pen ps37 = new Pen(brs37, pwidth);
            g.DrawLine(ps37, NewPoint(start, 814), NewPoint(end, 814));
            g.DrawString("HatchStyle.ZigZag", new Font("微软雅黑", 8), br1, NewPoint(end, 851));
            //样式38
            Brush brs38 = new HatchBrush((HatchStyle)37, color1, color2);
            Pen ps38 = new Pen(brs38, pwidth);
            g.DrawLine(ps38, NewPoint(start, 836), NewPoint(end, 836));
            g.DrawString("HatchStyle.Wave", new Font("微软雅黑", 8), br1, NewPoint(end, 874));
            //样式39
            Brush brs39 = new HatchBrush((HatchStyle)38, color1, color2);
            Pen ps39 = new Pen(brs39, pwidth);
            g.DrawLine(ps39, NewPoint(start, 858), NewPoint(end, 858));
            g.DrawString("HatchStyle.DiagonalBrick", new Font("微软雅黑", 8), br1, NewPoint(end, 897));
            //样式40
            Brush brs40 = new HatchBrush((HatchStyle)39, color1, color2);
            Pen ps40 = new Pen(brs40, pwidth);
            g.DrawLine(ps40, NewPoint(start, 880), NewPoint(end, 880));
            g.DrawString("HatchStyle.HorizontalBrick", new Font("微软雅黑", 8), br1, NewPoint(end, 920));
            //样式41
            Brush brs41 = new HatchBrush((HatchStyle)40, color1, color2);
            Pen ps41 = new Pen(brs41, pwidth);
            g.DrawLine(ps41, NewPoint(start, 902), NewPoint(end, 902));
            g.DrawString("HatchStyle.Weave", new Font("微软雅黑", 8), br1, NewPoint(end, 943));
            //样式42
            Brush brs42 = new HatchBrush((HatchStyle)41, color1, color2);
            Pen ps42 = new Pen(brs42, pwidth);
            g.DrawLine(ps42, NewPoint(start, 924), NewPoint(end, 924));
            g.DrawString("HatchStyle.Plaid", new Font("微软雅黑", 8), br1, NewPoint(end, 966));
            //样式43
            Brush brs43 = new HatchBrush((HatchStyle)42, color1, color2);
            Pen ps43 = new Pen(brs43, pwidth);
            g.DrawLine(ps43, NewPoint(start, 946), NewPoint(end, 946));
            g.DrawString("HatchStyle.Divot", new Font("微软雅黑", 8), br1, NewPoint(end, 989));
            //样式44
            Brush brs44 = new HatchBrush((HatchStyle)43, color1, color2);
            Pen ps44 = new Pen(brs44, pwidth);
            g.DrawLine(ps44, NewPoint(start, 968), NewPoint(end, 968));
            g.DrawString("HatchStyle.DottedGrid", new Font("微软雅黑", 8), br1, NewPoint(end, 1012));
            //样式45
            Brush brs45 = new HatchBrush((HatchStyle)44, color1, color2);
            Pen ps45 = new Pen(brs45, pwidth);
            g.DrawLine(ps45, NewPoint(start, 990), NewPoint(end, 990));
            g.DrawString("HatchStyle.DottedDiamond", new Font("微软雅黑", 8), br1, NewPoint(end, 1035));
            //样式46
            Brush brs46 = new HatchBrush((HatchStyle)45, color1, color2);
            Pen ps46 = new Pen(brs46, pwidth);
            g.DrawLine(ps46, NewPoint(start, 1012), NewPoint(end, 1012));
            g.DrawString("HatchStyle.Shingle", new Font("微软雅黑", 8), br1, NewPoint(end, 1058));
            //样式47
            Brush brs47 = new HatchBrush((HatchStyle)46, color1, color2);
            Pen ps47 = new Pen(brs47, pwidth);
            g.DrawLine(ps47, NewPoint(start, 1034), NewPoint(end, 1034));
            g.DrawString("HatchStyle.Trellis", new Font("微软雅黑", 8), br1, NewPoint(end, 1081));
            //样式48
            Brush brs48 = new HatchBrush((HatchStyle)47, color1, color2);
            Pen ps48 = new Pen(brs48, pwidth);
            g.DrawLine(ps48, NewPoint(start, 1056), NewPoint(end, 1056));
            g.DrawString("HatchStyle.Sphere", new Font("微软雅黑", 8), br1, NewPoint(end, 1104));
            //样式49
            Brush brs49 = new HatchBrush((HatchStyle)48, color1, color2);
            Pen ps49 = new Pen(brs49, pwidth);
            g.DrawLine(ps49, NewPoint(start, 1078), NewPoint(end, 1078));
            g.DrawString("HatchStyle.SmallGrid", new Font("微软雅黑", 8), br1, NewPoint(end, 1127));
            //样式50
            Brush brs50 = new HatchBrush((HatchStyle)49, color1, color2);
            Pen ps50 = new Pen(brs50, pwidth);
            g.DrawLine(ps50, NewPoint(start, 1100), NewPoint(end, 1100));
            g.DrawString("HatchStyle.SmallCheckerBoard", new Font("微软雅黑", 8), br1, NewPoint(end, 1150));
            //样式51
            Brush brs51 = new HatchBrush((HatchStyle)50, color1, color2);
            Pen ps51 = new Pen(brs51, pwidth);
            g.DrawLine(ps51, NewPoint(start, 1122), NewPoint(end, 1122));
            g.DrawString("HatchStyle.LargeCheckerBoard", new Font("微软雅黑", 8), br1, NewPoint(end, 1173));
            //样式52
            Brush brs52 = new HatchBrush((HatchStyle)51, color1, color2);
            Pen ps52 = new Pen(brs52, pwidth);
            g.DrawLine(ps52, NewPoint(start, 1144), NewPoint(end, 1144));
            g.DrawString("HatchStyle.OutlinedDiamond", new Font("微软雅黑", 8), br1, NewPoint(end, 1196));

            //复制code生成的代码结束
        }

        /// <summary>
        /// 将传入的点往y轴方向下移一定的距离
        /// </summary>
        /// <param name="offset"></param>
        private Point NewPoint(Point p, int offset)
        {
            p.Y += offset;
            return p;
        }

        private string GetAllBrushCode()
        {
            string a = "";
            for (int i = 1; i <= 52; i++)
            {
                a += "//样式" + i.ToString() + "\r\n";
                a += "Brush brs" + i.ToString() + " = new HatchBrush((HatchStyle)" + (i - 1).ToString() + ", color1, color2);\r\n";
                a += "Pen ps" + i.ToString() + " = new Pen(brs" + i.ToString() + ", pwidth);\r\n";
                a += "g.DrawLine(ps" + i.ToString() + ", NewPoint(start, " + (i * 22).ToString() + "), NewPoint(end, " + (i * 22).ToString() + "));\r\n";
                a += "g.DrawString(\"HatchStyle." + getBrushName(i - 1) + "\", new Font(\"微软雅黑\", 8), br1, NewPoint(end, " + (i * 23).ToString() + "));\r\n";

            }
            return a;
        }

        private string getBrushName(int index)
        {
            HatchStyle temp = (HatchStyle)index;
            return temp.ToString();
        }
    }