zoukankan      html  css  js  c++  java
  • 戏说 .NET GDI+系列学习教程(二、Graphics类的方法)

    一、DrawBezier 画立体的贝尔塞曲线

            private void frmGraphics_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = this.CreateGraphics();// e.Graphics;
    
                Pen blackPen = new Pen(Color.Red, 3);
    
                //从第一个点到第四个点绘制贝塞尔曲线。 第二个和第三个点是确定曲线的形状的控制点。
                Point start = new Point(100, 100);
                Point control1 = new Point(200, 10);
                Point control2 = new Point(350, 50);
                Point end = new Point(500, 100);
    
                //画立体的贝尔塞曲线.
                //DrawBezier有多种重载这里就不一一说明了
                g.DrawBezier(blackPen, start, control1, control2, end);
            }

    效果图:

     二、DrawArc 画弧

            private void frmGraphics_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = this.CreateGraphics();// e.Graphics;
                
                Pen p = new Pen(Color.Black, 3);
    
                // 定义矩形,用于确定弧线的边界,顾名思义就是在一个定义好的矩形中画画线
                // 现在创建的是一个正方形(正方形画圆,长方形画椭圆)
                Rectangle rect = new Rectangle(10, 10, 100, 100);
    
                // 从 x 轴到弧线的起始点沿顺时针方向度量的角(以度为单位)
                float startAngle = 45.0F;
                // 从 startAngle 参数到弧线的结束点沿顺时针方向度量的角(以度为单位)
                float sweepAngle = 180.0F;
                // 画矩形
                g.DrawRectangle(p, rect);
                // 画弧.
                g.DrawArc(p, rect, startAngle, sweepAngle);
    
                p = new Pen(Color.Red, 3);
    
                // 定义矩形,用于确定弧线的边界,顾名思义就是在一个定义好的矩形中画画线
                // 现在创建的是一个长方形(正方形画圆,长方形画椭圆)
                rect = new Rectangle(200, 200, 200, 100);
    
                // 从 x 轴到弧线的起始点沿顺时针方向度量的角(以度为单位)
                startAngle = 45.0F;
                // 从 startAngle 参数到弧线的结束点沿顺时针方向度量的角(以度为单位)
                sweepAngle = 180.0F;
                // 画矩形
                g.DrawRectangle(p, rect);
                // 画弧.
                g.DrawArc(p, rect, startAngle, sweepAngle);
            }

    效果图:

     三、DrawClosedCurve 画闭合曲线

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Graphics g = this.CreateGraphics();// e.Graphics;
     4 
     5             //DrawClosedCurve 画闭合曲线
     6             Pen redPen = new Pen(Color.Red, 3);
     7             Pen greenPen = new Pen(Color.Green, 3);
     8 
     9             // 创建七个点来定义一条曲线.
    10             Point point1 = new Point(50, 50);
    11             Point point2 = new Point(100, 25);
    12             Point point3 = new Point(200, 5);
    13             Point point4 = new Point(250, 50);
    14             Point point5 = new Point(300, 100);
    15             Point point6 = new Point(350, 200);
    16             Point point7 = new Point(250, 250);
    17             Point[] curvePoints =
    18                      {
    19                  point1,
    20                  point2,
    21                  point3,
    22                  point4,
    23                  point5,
    24                  point6,
    25                  point7
    26              };
    27 
    28             // 画线.
    29             e.Graphics.DrawLines(redPen, curvePoints);
    30 
    31             // 画闭合曲线
    32             e.Graphics.DrawClosedCurve(greenPen, curvePoints);
    33         }

    效果图:

    四、DrawCurve 画曲线

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Graphics g = this.CreateGraphics();// e.Graphics;
     4 
     5             // Create pens.
     6             Pen redPen = new Pen(Color.Red, 3);
     7             Pen greenPen = new Pen(Color.Green, 3);
     8 
     9             // Create points that define curve.
    10             Point point1 = new Point(50, 50);
    11             Point point2 = new Point(100, 25);
    12             Point point3 = new Point(200, 5);
    13             Point point4 = new Point(250, 50);
    14             Point point5 = new Point(300, 100);
    15             Point point6 = new Point(350, 200);
    16             Point point7 = new Point(250, 250);
    17             Point[] curvePoints = { point1, point2, point3, point4, point5, point6, point7 };
    18 
    19             // Draw lines between original points to screen.
    20             e.Graphics.DrawLines(redPen, curvePoints);
    21 
    22             // Draw curve to screen.
    23             e.Graphics.DrawCurve(greenPen, curvePoints);
    24         }

    效果图:

    五、DrawEllipse 画椭圆

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Graphics g = this.CreateGraphics();// e.Graphics;
     4 
     5             // Create pen.
     6             Pen blackPen = new Pen(Color.Black, 3);
     7 
     8             // 创建矩形,定义椭圆边界值
     9             Rectangle rect = new Rectangle(0, 0, 200, 100);
    10 
    11             // 绘制椭圆
    12             e.Graphics.DrawEllipse(blackPen, rect);
    13         }

    效果图:

    六、DrawImage 画图像 

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Pen p = new Pen(Color.Red);
     4             // 创建Image对象
     5             Image newImage = Image.FromFile(@"E:TestTestGDI_DemoimagesDrawBackgroundImage.png");
     6 
     7             // 创建图像左上角的坐标
     8             float x = 100.0F;
     9             float y = 100.0F;
    10 
    11             // 定义矩形的位置(这个和Graphics对象的方法有关)和大小
    12             // public RectangleF (float x, float y, float width, float height);
    13             // x,y 矩形左上角坐标
    14             RectangleF srcRect = new RectangleF(50.0F, 50.0F, 150.0F, 150.0F);
    15             // 单位:像素
    16             GraphicsUnit units = GraphicsUnit.Pixel;
    17 
    18             // 矩形左上角坐标,是参照Form窗体的
    19             e.Graphics.DrawRectangle(p, 50.0F, 50.0F, 150.0F, 150.0F);
    20             // 将图像绘制到屏幕上
    21             // 矩形左上角坐标,是参照Image对象的
    22             e.Graphics.DrawImage(newImage, x, y, srcRect, units);
    23         }

    效果图:

    说明:

     七、DrawLine 画线

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Pen p = new Pen(Color.Red);
     4             //起点坐标
     5             Point point1 = new Point(100, 100);
     6             //终点坐标
     7             Point point2 = new Point(500, 100);
     8 
     9             // 绘制直线
    10             e.Graphics.DrawLine(p, point1, point2);
    11         }

    效果图:

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Pen p = new Pen(Color.Red);
     4             Point[] points =
     5              {
     6                  new Point(10,  10),
     7                  new Point(10, 100),
     8                  new Point(200,  50),
     9                  new Point(250, 300)
    10              };
    11 
    12             //Draw lines to screen.
    13             e.Graphics.DrawLines(p, points);
    14         }

    效果图:

    八、DrawPath 通过路径画线和曲线

    1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
    2         {
    3             Pen p = new Pen(Color.Red);
    4             // 创建图形路径对象,并向它添加一个椭圆
    5             GraphicsPath graphPath = new GraphicsPath();
    6             graphPath.AddEllipse(0, 0, 200, 100);
    7             // 绘制图形路径
    8             e.Graphics.DrawPath(p, graphPath);
    9         }

    效果图:

    九、DrawPie 画饼形

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Pen p = new Pen(Color.Red);
     4             // 绘制一个扇形,该形状由一个坐标对、宽度、高度以及两条射线所指定的椭圆定义
     5             float x = 0.0F;
     6             float y = 0.0F;
     7             float width = 200.0F;
     8             float height = 100.0F;
     9 
    10             // Create start and sweep angles.
    11             float startAngle = 0.0F;
    12             float sweepAngle = 90.0F;
    13 
    14             // Draw pie to screen.
    15             e.Graphics.DrawPie(p, x, y, width, height, startAngle, sweepAngle);
    16         }

    效果图

    说明图

     

    十、DrawPolygon 画多边形 

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             Pen p = new Pen(Color.Red,3);
     4             // Create points that define polygon.
     5             PointF point1 = new PointF(50.0F, 50.0F);
     6             PointF point2 = new PointF(100.0F, 25.0F);
     7             PointF point3 = new PointF(200.0F, 5.0F);
     8             PointF point4 = new PointF(250.0F, 50.0F);
     9             PointF point5 = new PointF(300.0F, 100.0F);
    10             PointF point6 = new PointF(350.0F, 200.0F);
    11             PointF point7 = new PointF(250.0F, 250.0F);
    12             PointF[] curvePoints =
    13                      {
    14                  point1,
    15                  point2,
    16                  point3,
    17                  point4,
    18                  point5,
    19                  point6,
    20                  point7
    21              };
    22 
    23             // Draw polygon curve to screen.
    24             e.Graphics.DrawPolygon(p, curvePoints);
    25         }

     效果图:

    十一、DrawRectangle 画矩形 

    1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
    2         {
    3             Pen p = new Pen(Color.Red,3);
    4             // Create rectangle.
    5             Rectangle rect = new Rectangle(0, 0, 200, 200);
    6 
    7             // Draw rectangle to screen.
    8             e.Graphics.DrawRectangle(p, rect);
    9         }

     效果图:

    十二、DrawString 绘制文字

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             // 定义绘制文字
     4             String drawString = "Sample Text";
     5 
     6             // 定义字体
     7             Font drawFont = new Font("Arial", 16);
     8             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
     9             // 所以刷子就有以下几种
    10             // SolidBrush               : 单色画笔
    11             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
    12             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
    13             // LinearGradientBrush      : 线性渐变
    14             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
    15             SolidBrush drawBrush = new SolidBrush(Color.Black);
    16 
    17             // Create point for upper-left corner of drawing.
    18             float x = 150.0F;
    19             float y = 50.0F;
    20 
    21             // 绘制文本的格式化特性(如行距和对齐方式)
    22             StringFormat drawFormat = new StringFormat();
    23             drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
    24 
    25             // Draw string to screen.
    26             e.Graphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);
    27         }

    效果图:

    十三、FillEllipse 填充椭圆 

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
     4             // 所以刷子就有以下几种
     5             // SolidBrush               : 单色画笔
     6             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
     7             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
     8             // LinearGradientBrush      : 线性渐变
     9             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
    10             SolidBrush redBrush = new SolidBrush(Color.Red);
    11 
    12             // Create location and size of ellipse.
    13             int x = 0;
    14             int y = 0;
    15             int width = 200;
    16             int height = 100;
    17 
    18             // 填充边框所定义的椭圆的内部
    19             e.Graphics.FillEllipse(redBrush, x, y, width, height);
    20         }

    效果图:

    十四、FillPath 填充路径

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
     4             // 所以刷子就有以下几种
     5             // SolidBrush               : 单色画笔
     6             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
     7             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
     8             // LinearGradientBrush      : 线性渐变
     9             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
    10 
    11 
    12             //SolidBrush redBrush = new SolidBrush(Color.Red);
    13 
    14             Bitmap image1 = (Bitmap)Image.FromFile(@"E:TestTestGDI_DemoimagesTextureImage.png", true);
    15 
    16             TextureBrush texture = new TextureBrush(image1);
    17             texture.WrapMode = System.Drawing.Drawing2D.WrapMode.Tile;
    18             
    19 
    20             // 创建图形路径对象
    21             GraphicsPath graphPath = new GraphicsPath();
    22             //向图形路径添加一个椭圆。
    23             graphPath.AddEllipse(0, 0, 200, 100);
    24 
    25             // 填充 GraphicsPath 
    26             e.Graphics.FillPath(texture, graphPath);
    27         }

    效果图:

    十五、FillPie 填充饼图 

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
     4             // 所以刷子就有以下几种
     5             // SolidBrush               : 单色画笔
     6             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
     7             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
     8             // LinearGradientBrush      : 线性渐变
     9             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
    10 
    11 
    12             //SolidBrush redBrush = new SolidBrush(Color.Red);
    13 
    14             // HatchStyle.Horizontal => 水平线, Color.Red => 红色水平线,背景色:Color.FromArgb(255, 128, 255, 255)
    15             HatchBrush hBrush = new HatchBrush(HatchStyle.Horizontal, Color.Red, Color.FromArgb(255, 128, 255, 255));
    16 
    17             Rectangle rect = new Rectangle(0, 0, 200, 100);
    18             // Create start and sweep angles.
    19             float startAngle = 0.0F;
    20             float sweepAngle = 45.0F;
    21 
    22             // Fill pie to screen.
    23             e.Graphics.FillPie(hBrush, rect, startAngle, sweepAngle);
    24         }

    效果图:

    十六、FillPolygon 填充多边形 

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
     4             // 所以刷子就有以下几种
     5             // SolidBrush               : 单色画笔
     6             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
     7             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
     8             // LinearGradientBrush      : 线性渐变
     9             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
    10 
    11 
    12             //SolidBrush redBrush = new SolidBrush(Color.Red);
    13 
    14             //坐标相对填充对象
    15             LinearGradientBrush linGrBrush = new LinearGradientBrush(new Point(0, 10), new Point(200, 10),
    16                                                                        Color.FromArgb(255, 255, 0, 0),   // Opaque red
    17                                                                        Color.FromArgb(255, 0, 0, 255));  // Opaque blue
    18 
    19             Pen pen = new Pen(linGrBrush,3);
    20 
    21             e.Graphics.DrawLine(pen, 0, 10, 200, 10);
    22 
    23             // Create points that define polygon.
    24             Point point1 = new Point(50, 50);
    25             Point point2 = new Point(100, 25);
    26             Point point3 = new Point(200, 5);
    27             Point point4 = new Point(250, 50);
    28             Point point5 = new Point(300, 100);
    29             Point point6 = new Point(350, 200);
    30             Point point7 = new Point(250, 250);
    31             Point[] curvePoints = { point1, point2, point3, point4, point5, point6, point7 };
    32 
    33             // Draw polygon to screen.
    34             e.Graphics.FillPolygon(linGrBrush, curvePoints);
    35         }

    效果图:

    十七、FillRectangle 填充矩形

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
     4             // 所以刷子就有以下几种
     5             // SolidBrush               : 单色画笔
     6             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
     7             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
     8             // LinearGradientBrush      : 线性渐变
     9             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
    10 
    11 
    12             SolidBrush redBrush = new SolidBrush(Color.Red);
    13             Rectangle rect = new Rectangle(0, 0, 200, 200);
    14             e.Graphics.FillRectangle(redBrush, rect);
    15         }

    效果图:

    十八、FillRectangles 填充矩形组

     1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
     2         {
     3             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
     4             // 所以刷子就有以下几种
     5             // SolidBrush               : 单色画笔
     6             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
     7             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
     8             // LinearGradientBrush      : 线性渐变
     9             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
    10 
    11 
    12             //SolidBrush redBrush = new SolidBrush(Color.Red);
    13             SolidBrush blueBrush = new SolidBrush(Color.Blue);
    14             
    15             RectangleF[] rects = { new RectangleF(0.0F, 0.0F, 100.0F, 200.0F),
    16                                    new RectangleF(100.0F, 200.0F, 250.0F, 50.0F),
    17                                    new RectangleF(300.0F, 0.0F, 50.0F, 100.0F) };
    18             
    19             e.Graphics.FillRectangles(blueBrush, rects);
    20         }

    效果图:

    十九、FillRegion 填充区域

      1         private void frmGraphics_Paint(object sender, PaintEventArgs e)
      2         {
      3             // 定义单色画笔,墨要使用刷子(可以理解为毛笔)才能作画
      4             // 所以刷子就有以下几种
      5             // SolidBrush               : 单色画笔
      6             // TextureBrush             : 纹理画笔(使用图像来填充形状的内部)
      7             // HatchBrush               : 用阴影样式、前景色和背景色定义矩形画笔
      8             // LinearGradientBrush      : 线性渐变
      9             // PathGradientBrush        : 通过渐变填充 GraphicsPath 对象
     10 
     11             Graphics g = e.Graphics;
     12             // 创建矩形,为定义Region对象的填充区域
     13             Rectangle regionRect = new Rectangle(10, 10, 50, 50);
     14             Pen pen1 = new Pen(Color.Black);
     15             //为看出效果
     16             g.DrawRectangle(pen1, regionRect);
     17             
     18             // 创建第二个矩形,主要用于区域交集填充
     19             RectangleF unionRect = new RectangleF(25, 25, 50, 50);//第2个矩形
     20             pen1.Color = Color.Red;
     21             //为看出效果
     22             g.DrawEllipse(pen1, unionRect);//画椭圆
     23 
     24             GraphicsPath myPath = new GraphicsPath();
     25             myPath.AddEllipse(unionRect);
     26 
     27             // 创建Region对象的填充区域
     28             Region myRegion = new Region(regionRect);
     29 
     30             //两个区域的交集被填充
     31             myRegion.Intersect(myPath);
     32 
     33             SolidBrush blueBrush = new SolidBrush(Color.Blue);
     34             // 填充
     35             e.Graphics.FillRegion(blueBrush, myRegion);
     36 
     37             //=================Complement==================
     38             regionRect = new Rectangle(100, 10, 50, 50);
     39             pen1 = new Pen(Color.Black);
     40             //为看出效果
     41             g.DrawRectangle(pen1, regionRect);
     42 
     43             // 创建第二个矩形
     44             unionRect = new RectangleF(115, 25, 50, 50);
     45             pen1.Color = Color.Red;
     46             g.DrawEllipse(pen1, unionRect);//画椭圆
     47 
     48             myPath = new GraphicsPath();
     49             myPath.AddEllipse(unionRect);
     50 
     51             myRegion = new Region(regionRect);
     52             // myPath 无交集的区域被填充
     53             myRegion.Complement(myPath);
     54             
     55             // 填充
     56             e.Graphics.FillRegion(blueBrush, myRegion);
     58 
     59             //=================Exclude==================
     60 
     61             regionRect = new Rectangle(190, 10, 50, 50);
     62             pen1 = new Pen(Color.Black);
     63             //为看出效果
     64             g.DrawRectangle(pen1, regionRect);
     65 
     66             // 创建第二个矩形
     67             unionRect = new RectangleF(205, 25, 50, 50);
     68             pen1.Color = Color.Red;
     69             g.DrawEllipse(pen1, unionRect);//画椭圆
     70 
     71             myPath = new GraphicsPath();
     72             myPath.AddEllipse(unionRect);
     73 
     74             myRegion = new Region(regionRect);
     75 
     76             // myRegion 无交集的区域被填充
     77             myRegion.Exclude(myPath);
     78             
     79             // 填充
     80             e.Graphics.FillRegion(blueBrush, myRegion);
     81 
     82             //=================Union==================
     83 
     84             regionRect = new Rectangle(280, 10, 50, 50);
     85             pen1 = new Pen(Color.Black);
     86             //为看出效果
     87             g.DrawRectangle(pen1, regionRect);
     88 
     89             // 创建第二个矩形
     90             unionRect = new RectangleF(295, 25, 50, 50);
     91             pen1.Color = Color.Red;
     92             g.DrawEllipse(pen1, unionRect);//画椭圆
     93 
     94             myPath = new GraphicsPath();
     95             myPath.AddEllipse(unionRect);
     96 
     97             myRegion = new Region(regionRect);
     98 
     99             // 两个区域被填充
    100             myRegion.Union(myPath);
    101             
    102             // 填充
    103             e.Graphics.FillRegion(blueBrush, myRegion);
    104 
    105             //=================Xor==================
    106 
    107             regionRect = new Rectangle(370, 10, 50, 50);
    108             pen1 = new Pen(Color.Black);
    109             //为看出效果
    110             g.DrawRectangle(pen1, regionRect);
    111 
    112             // 创建第二个矩形
    113             unionRect = new RectangleF(385, 25, 50, 50);
    114             pen1.Color = Color.Red;
    115             g.DrawEllipse(pen1, unionRect);//画椭圆
    116 
    117             myPath = new GraphicsPath();
    118             myPath.AddEllipse(unionRect);
    119 
    120             myRegion = new Region(regionRect);
    121 
    122             // 交集以外区域被填充
    123             myRegion.Xor(myPath);
    124             
    125             // 填充
    126             e.Graphics.FillRegion(blueBrush, myRegion);
    127         }

    效果图:

  • 相关阅读:
    Delphi中Chrome Chromium、Cef3学习笔记(五)
    java ->IO流_File类
    java ->递归
    java-> 分包分层
    java ->JDBC
    java -> 异常类与自定义异常
    java ->斗地主洗牌
    java -> map接口
    java ->Set接口
    java -> List接口
  • 原文地址:https://www.cnblogs.com/WarBlog/p/11134146.html
Copyright © 2011-2022 走看看