C#之GDI+绘图

2024-05-15  本文已影响0人  小羊爱学习

一 简介

GDI+ 是微软在Windows 2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来展现,这套类被称为GDI+的“托管类接口”,GDI+主要提供了以下三类服务:

Graphics类 是GDI+技术的一个基本类。GDI+(Graphics Device Interface)是.NET框架的重要组成部分,提供对二维图形图像和文字排版处理的支持。
GDI+相关的类分布在下列命名空间中:

二 技术要点

方法一:利用控件或窗体的Paint事件中的PainEventArgs。

在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。
eg:

//窗体的Paint事件的响应方法
private void form1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
}

也可以直接重载控件或窗体的OnPaint方法,具体代码如下所示:

protected override void OnPaint(PaintEventArgs e)
{
    Graphics g = e.Graphics;
}

Paint事件在重绘控件时发生。

方法二、调用某控件或窗体的CreateGraphics方法

调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,通常会使用此方法。
eg:

Graphics g = this.CreateGraphics();

方法三、调用Graphics类的FromImage静态方法

由从Image继承的任何对象创建Graphics对象。在需要更改已存在的图像时,通常会使用此方法。
eg:

//名为“g1.jpg”的图片位于当前路径下

Image img = Image.FromFile("g1.jpg");//建立Image对象

Graphics g = Graphics.FromImage(img);//创建Graphics对象
GDI坐标系.png

常用操作

   //平移坐标系
  g.TranslateTransform(10, 10);
  //顺时针选装坐标系
  g.RotateTransform(45);
  // 恢复坐标轴坐系
  g.ResetTransform()

通过反编译我们可以看到Pen对象创建方法和一些属性

image.png
image.png
当然具体权威的还是去官网看一下这个pen:https://learn.microsoft.com/zh-cn/dotnet/api/system.drawing.pen?view=net-8.0
image.png
image.png
Pen  p = new  Pen(Color.Blue, 5);//设置笔的粗细为,颜色为蓝色
//画实线
p.DashStyle = DashStyle.Solid;//恢复实线
//画虚线
p.DashStyle = DashStyle.Dot;//定义虚线的样式为点
//自定义虚线
p.DashPattern = new  float[] { 2, 1 };//设置短划线和空白部分的数组
//画箭头,只对不封闭曲线有用
p.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头
p.Dispose();

这里主要说一下Brush,它是一个抽象类,不能被直接new实例化,我们一般使用它的派生类
① SolideBrush:实心画刷(最简单)
② HatchBrush:带阴影线的画刷;
③ LinearGradientBrush 填充颜色线性渐变的画刷;
④ PathGradientBrush 填充颜色沿着路径渐变的画刷;
⑤ TextureBrush 使用图像进行填充的画刷
eg:

Brush brush = new SolidBrush(Color.FromArgb(15, 68, 35));
SolidBrush brush = new SolidBrush(Color.Blue);

消除锯齿

g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿

画直线

image.png
画矩形
image.png
画圆弧
image.png
画椭圆(包括圆)
方法名 注释
DrawEllipse(Pen, Int32, Int32, Int32, Int32) 绘制由边框定义的椭圆,边框由矩形左上角的坐标、高度和宽度指定。
DrawEllipse(Pen, Rectangle) 绘制由边界矩形结构指定的椭圆。
DrawEllipse(Pen, RectangleF) 绘制由边界RectangleF定义的椭圆。
DrawEllipse(Pen, Single, Single, Single, Single) 绘制由一对坐标、高度和宽度指定的边界矩形定义的椭圆。

画扇形

image.png
画多边形
image.png
绘制字符串
image.png
填充图形
基本上是将draw改为fill
Graphics g = this.CreateGraphics();
Rectangle rect = new Rectangle(10, 10, 50, 50);//定义矩形,参数为起点横纵坐标以及其长和宽
//单色填充
SolidBrush b1 = new SolidBrush(Color.Blue);//定义单色画刷         
g.FillRectangle(b1, rect);//填充这个矩形
上一篇下一篇

猜你喜欢

热点阅读