WinForm中使用Graphics画元素

前言

有时候我们需要在一个图像上显示一些文字,或者画一些标志,这就想我们平时截图也需要做一些描述信息。在C#中我们可以Graphics这个对象来绘制自己所需要描述的信息,当然在WPF中的它的设计思路又不一样了,在WPf中考虑使用的矩形控件等元素进行标注。他的前台界面设计更加丰富。

**注意:**在这里仅是演示在WinForm中,通过PictureBox控件来画出一些元素。

一、效果展示

二、实现代码

1、主要调用方法

官方文档:Graphics 类 (System.Drawing) | Microsoft Learn

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
| DrawLine(Pen, Point, Point) | 绘制一条连接两个 Point 结构的线。 |

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
| DrawPolygon(Pen, PointF[]) | 绘制由一组 PointF 结构定义的多边形。 |

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| DrawString(String, Font, Brush, PointF) | 在指定位置并且用指定的 BrushFont 对象绘制指定的文本字符串。 |

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|
| DrawRectangle(Pen, Int32, Int32, Int32, Int32) | 绘制由坐标对、宽度和高度指定的矩形。 |

2、画线段
cs 复制代码
       //线
        private void button2_Click(object sender, EventArgs e)
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            SolidBrush mybrush = new SolidBrush(Color.DarkKhaki);
            Pen pen = new Pen(mybrush, 10);
            g.DrawLine(pen, 200, 450, 950, 350);
            pictureBox1.Refresh();
        }
3、画多边形
cs 复制代码
 //多边形
        private void button4_Click(object sender, EventArgs e)
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            SolidBrush mybrush = new SolidBrush(Color.DodgerBlue);
            Pen pen = new Pen(mybrush, 10);
            g.DrawPolygon(pen,new Point[] {new Point(250, 1550),new Point(1050, 1400) 
                ,new Point(1300,1800), new Point(1500, 1200) });
            pictureBox1.Refresh();
        }
4、画矩形
cs 复制代码
 private void btn_append_Click(object sender, EventArgs e)
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            SolidBrush mybrush = new SolidBrush(Color.DarkGreen);
            Pen pen = new Pen(mybrush,10);
            g.DrawRectangle(pen, new Rectangle(new Point(100, 200), new Size(200, 500)));
            pictureBox1.Refresh();
        }
5、写文字
cs 复制代码
 //文字
        private void button3_Click(object sender, EventArgs e)
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            SolidBrush mybrush = new SolidBrush(Color.Red);
            Font myfont = new Font("黑体", 150);
            g.DrawString(tb_info.Text, myfont, mybrush, new Rectangle(x + 200, y + 50, w + 500, h + 50));
            pictureBox1.Refresh();
        }
6、保存结果图
cs 复制代码
   private void btn_save_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter= "JPG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp";
            if (saveFileDialog1.ShowDialog()==DialogResult.OK)
            {
                pictureBox1.Image.Save(saveFileDialog1.FileName);
            }
        }
相关推荐
云和恩墨18 分钟前
云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?
数据库·人工智能·云计算·dba
明月看潮生1 小时前
青少年编程与数学 02-007 PostgreSQL数据库应用 11课题、视图的操作
数据库·青少年编程·postgresql·编程与数学
阿猿收手吧!1 小时前
【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
数据库·redis·缓存
奈葵1 小时前
Spring Boot/MVC
java·数据库·spring boot
leegong231111 小时前
Oracle、PostgreSQL该学哪一个?
数据库·postgresql·oracle
中东大鹅1 小时前
MongoDB基本操作
数据库·分布式·mongodb·hbase
夜光小兔纸2 小时前
Oracle 普通用户连接hang住处理方法
运维·数据库·oracle
MasterNeverDown3 小时前
WPF 使用iconfont
hadoop·ui·wpf
兩尛3 小时前
订单状态定时处理、来单提醒和客户催单(day10)
java·前端·数据库
web2u3 小时前
MySQL 中如何进行 SQL 调优?
java·数据库·后端·sql·mysql·缓存