GDI+图形基础

GDI+:Graphics Device Interface Plus也就是图形设备接口,提供了各种丰富的图形图像处理功能;在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使用DirectX处理三维(3D)的图形图像。

图形图像处理用到的主要命名空间是System . Drawing:提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等.

1.画板——Graphics对象

创建一个画板主要有3种方式:
  A: 在窗体或控件的Paint事件中直接引用Graphics对象

private void Form1_Paint(object sender, PaintEventArgs e)
{
   Graphics g = e.Graphics; //创建画板,这里的画板是由Form提供的.
   Pen p = new Pen(Color.Blue, 2);//定义了一个蓝色,宽度为的画笔
     g.DrawLine(p, 10, 10, 100, 100);//在画板上画直线,起始坐标为(10,10),终点坐标为(100,100)
}
  B: 利用窗体或某个控件的CreateGraphics方法

Graphics g = this.CreateGraphics();
  C: 从继承自图像的任何对象创建Graphics对象

private int letterWidth = 100;     //单个字体的最大宽度和高度
private int letterHight = 30;
Bitmap image = new Bitmap(letterWidth, letterHight);       //创建图片背景
Graphics g = Graphics.FromImage(image);
g.Clear(Color.AliceBlue);      //用系统的颜色清除画面并填充背景
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;     //指定画面呈现模式——消除锯齿

2.画笔——Pen

Pen的属性主要有: Color(颜色),DashCap(短划线终点形状),DashStyle(虚线样式),EndCap(线尾形状), StartCap(线头形状),Width(粗细)等.我们可以用Pen 来画虚线,带箭头的直线等线性图形。

Pen p = new Pen(Color.Blue, 2);//颜色,宽度
p.DashStyle = DashStyle.Dot;//定义虚线的样式 using System.Drawing.Drawing2D;
p.DashPattern = new float[] { 2, 1 };//设置短划线和空白部分的数组
p.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头,只对不封闭曲线有用
g.DrawLine(p, 10, 10, 100, 100);//画直线
g.DrawRectangle(p, 10, 10, 100, 100);//画矩形
g.DrawEllipse(p, 10, 10, 100, 100);//画椭圆
g.Dispose();
p.Dispose();

3.画刷——Brush

作用:我们可以用画刷填充各种图形形状,如矩形、椭圆、扇形、多边形和封闭路径等,主要有几种不同类型的画刷:SolidBrush:画刷最简单的形式,用纯色进行绘制 HatchBrush:类似于 SolidBrush,但是可以利用该类从大量预设的图案中选择绘制时要使用的图案,而不是纯色TextureBrush:使用纹理(如图像)进行绘制 LinearGradientBrush:使用沿渐变混合的两种颜色进行绘制PathGradientBrush :基于编程者定义的唯一路径,使用复杂的混合色渐变进行绘制
Graphics g = this.CreateGraphics();
Rectangle rect = new Rectangle(10, 10, 50, 50);//定义矩形
//单色填充
SolidBrush b1 = new SolidBrush(Color.Blue);    
//用图片填充
TextureBrush b2 = new TextureBrush(Image.FromFile(@"e:picture1.jpg"));
//用渐变色填充
LinearGradientBrush b3 = new LinearGradientBrush(rect, Color.Yellow , Color.Black , LinearGradientMode.Horizontal);
g.FillRectangle(b3, rect);
g.DrawString("字符串", new Font("宋体", 10), b1, new PointF(90, 10));

4.字体——Font

using System.Drawing.Drawing2D; 
string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };Font f = new Font(font[findex], 13,FontStyle.Bold);//字体样式(参数2为字体大小)
string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
Font f = new Font(font[findex], 13,FontStyle.Bold);//字体样式(参数2为字体大小)
或者
Font f = new Font(FontFamily.GenericSerif, 15, FontStyle.Bold);

其中,FontStyle 枚举量有:
Regular普通文本。 
Bold        加粗文本。 
Italic        倾斜文本。 
Underline      带下划线的文本。 
Strikeout        中间有直线通过的文本。 

5.Draw方法

5.1 画直线——DrawLine

public void DrawLine(Pen pen, PointF pt1, PointF pt2);
public void DrawLine(Pen pen, float x1, float y1, float x2, float y2);
public void DrawLine(Pen pen, int x1, int y1, int x2, int y2);
public void DrawLines(Pen pen, Point[] points);
public void DrawLines(Pen pen, PointF[] points);

5.2 画矩形——DrawRectangle

public void DrawRectangle(Pen pen, Rectangle rect); 
public void DrawRectangle(Pen pen, float x, float y, float width, float height);
public void DrawRectangle(Pen pen, int x, int y, int width, int height);
public void DrawRectangles(Pen pen, Rectangle[] rects);
public void DrawRectangles(Pen pen, RectangleF[] rects);

5.3  画字符串——DrawString

public void DrawString(string s, Font font, Brush brush, PointF point);
public void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle);
public void DrawString(string s, Font font, Brush brush, float x, float y);
public void DrawString(string s, Font font, Brush brush, PointF point, StringFormat format);
public void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format);
public void DrawString(string s, Font font, Brush brush, float x, float y, StringFormat format);

PS:关于StringFormat:定义文字的对齐格式

StringFormat format = new StringFormat(StringFormatFlags.NoClip);
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
Font f = new System.Drawing.Font("宋体", 13, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(Color.Red);
g.DrawString("hello", f, b, 1, 1, format);

6.坐标系变换

在winform中的坐标轴和我们平时接触的平面直角坐标轴不同,winform中的坐标轴方向完全相反:窗体的左上角为原点(0,0),水平向左则X增大,垂直下向则Y增大。

g.RotateTransform(30);             //坐标轴绕原点顺时针旋转30度
g.TranslateTransform(100, 100);     //坐标轴以(100,100)为原点
g.ResetTransform();//恢复坐标轴坐标,即以窗体的(0,0)点为原点








评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值