• C#(三十二)之Windows绘图


    绘图相关的命名空间

    System. Drawing:提供最基本的绘图功能(直线,椭圆等);

    System. Drawing. Drawing2D;提供高级二维和矢量绘图功能(渐变、图片填充、轨迹等)。

    System. Drawing .Imaging;命名空间提供图像处理功能;

    System. Drawing. Text;命名空间提供排版功能;

    System. Drawing. Printing;提供打印相关的服务;


    像素和坐标系

    构成图像的最小单位:像素。

    坐标数不存在负数(Y轴向下也是正数);

    **[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMPz96sk-1656122898483)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8bbf6f4ef8024deb88996ad0274fbb09~tplv-k3u1fbpfcp-zoom-1.image "1556851314357416.png")]**


    颜色:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7KBvPSI7-1656122898490)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4d3bbfdee69c410994f7e5d3fa0f92be~tplv-k3u1fbpfcp-zoom-1.image "1556851416162478.png")]


    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSZawqrJ-1656122898491)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/04bd72608d7e40c1a60e3d6cfe2abdc6~tplv-k3u1fbpfcp-zoom-1.image "1556851428756795.png")]


    画图:

    ****Graphics ****对象表示 GDI+ 绘图表面,并且该对象是用于创建图形图像的对象。

    只要画图,就需要定义 Graphics 对象。

    创建一个用于画图的对象

    Graphics g = this.CreateGraphics();
    
    • 1

    创建一个笔:两个参数(颜色,笔画粗细)

    Pen pen = new Pen(Color.Red, 5);
    
    • 1

    设置划线起点和终点坐标

    Point startPoint = new Point(50,50);
    Point endPoint = new Point(400, 400);
    
    • 1
    • 2

    画线

    g.DrawLine(pen,startPoint, endPoint);
    
    • 1

    释放画线动作

    g.Dispose();
    
    • 1

    释放笔

    pen.Dispose();
    
    • 1

    实例:

    /**
             * 画图按钮
             */
            private void huatu_Click(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
                // 创建一个笔
                Pen pen = new Pen(Color.Red, 5);
                // 设置划线起点和终点坐标
                Point startPoint = new Point(50,50);
                Point endPoint = new Point(400, 400);
                // 画线
                g.DrawLine(pen,startPoint, endPoint);
                // 释放画线动作
                g.Dispose();
                // 释放笔
                pen.Dispose();
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    清除刚刚绘制的图像

    Clear参数(将窗体背景清除成什么颜色);

    /**
             * 清空按钮
             */
            private void qingchu_Click(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
     
                // 清除图像(参数:窗体背景颜色)
                g.Clear(BackColor);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-URZ6OIzR-1656122898492)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f92407818c1b4e6d84c8c184308a9b20~tplv-k3u1fbpfcp-zoom-1.image "1556851648474748.png")]

    Brush画刷的四个派生类

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uE8kIIXO-1656122898493)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/42d651cfd85542289ee97bfdefd3d970~tplv-k3u1fbpfcp-zoom-1.image "1556851441870425.png")]

    只要画图,就需要定义 Graphics 对象。

    绘制椭圆:其实和画直线是一样的。都是确定两个点。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrB0HuA3-1656122898495)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5ee78134d45e492c952ed955a4b92a54~tplv-k3u1fbpfcp-zoom-1.image "1556851453431728.png")]

    结合之前学过的委托,做了个画椭圆的小程序:

    效果如下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mYRzbmAT-1656122898496)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/34840f5629a34c529e04619e5cc0f71a~tplv-k3u1fbpfcp-zoom-1.image
    “1556851461266324.png”)]

    测试使用全部代码:

    Form1.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System. Drawing.Drawing2D;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    namespace huitu
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            /**
             * 画图按钮
             */
            private void huatu_Click(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
                // 创建一个笔
                Pen pen = new Pen(Color.Red, 5);
                // 设置划线起点和终点坐标
                Point startPoint = new Point(50,50);
                Point endPoint = new Point(400, 400);
                // 画线
                g.DrawLine(pen,startPoint, endPoint);
                // 释放画线动作
                g.Dispose();
                // 释放笔
                pen.Dispose();
            }
            /**
             * 清空按钮
             */
            private void qingchu_Click(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
                // 清除图像(参数:窗体背景颜色)
                g.Clear(BackColor);
            }
            // 定义委托
            public delegate void drawsss(object sender, EventArgs e);
            public static void runPlay(drawsss dong, object sender, EventArgs e)
            {
                dong(sender,e);
            }
            /**
             * 画椭圆
             */
            private void tuoyuan_Click(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                //Graphics g = this.CreateGraphics();
                // 定义画刷
                //SolidBrush brush = new SolidBrush(Color.Gray);
                // 画椭圆需要5个参数
                //g.FillEllipse(brush, 10, 10, 500, 200);
                // 释放画线动作
                //g.Dispose();
                // 释放笔
                //brush.Dispose();
                // (多播委托)
                drawsss anm_one = new drawsss(shixin_CheckedChanged);
                anm_one += wenli_CheckedChanged;
                anm_one += jianbian_CheckedChanged;
                anm_one += yinying_CheckedChanged;
            }
            // 定义一个画刷
            //private Brush brush = new SolidBrush(Color.Gray);
            // 画实心
            private void shixin_CheckedChanged(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
                SolidBrush brush = new SolidBrush(Color.Gold);
                // 画椭圆需要5个参数
                g.FillEllipse(brush, 10, 10, 500, 200);
               
            }
            //画纹理
            private void wenli_CheckedChanged(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
                TextureBrush brush = new TextureBrush(imageList1.Images[0]);
                // 画椭圆需要5个参数
                g.FillEllipse(brush, 10, 10, 500, 200);
               
            }
            // 画渐变(从一种颜色变道另一种颜色)
            private void jianbian_CheckedChanged(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
                // 设置划线起点和终点坐标
                Point startPoint = new Point(200, 200);
                Point endPoint = new Point(800, 800);
                LinearGradientBrush brush = new LinearGradientBrush(startPoint, endPoint, Color.HotPink, Color.LightBlue);
                // 画椭圆需要5个参数
                g.FillEllipse(brush, 10, 10, 500, 200);
            }
            private void yinying_CheckedChanged(object sender, EventArgs e)
            {
                // 创建一个用于画图的对象
                Graphics g = this.CreateGraphics();
                HatchBrush brush = new HatchBrush(HatchStyle.DashedDownwardDiagonal, Color.SeaShell, Color.Thistle);
                // 画椭圆需要5个参数
                g.FillEllipse(brush, 10, 10, 500, 200);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118

    有好的建议,请在下方输入你的评论。

    欢迎访问个人博客
    https://guanchao.site

    欢迎访问小程序:

    在这里插入图片描述

  • 相关阅读:
    sed 原地替换文件时遇到的趣事
    Python使用selenium中的CSS_SELECTOR进行搞定复杂多标签定位
    Kotlin中的步长
    Postgresql中如何处理逻辑复制冲突
    要不是家里穷,我也不想当码农
    Unity3D占用内存太大怎么解决呢? -补
    缓存的放置时间和删除时间
    ArkUI框架,Flex布局,基础组件及封装,父子组件的双向绑定
    JSON对象相互转换
    RAID技术复习笔记
  • 原文地址:https://blog.csdn.net/qq_39708228/article/details/125456003