打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#画图
C#画图
在.NET下面画图需要用到System.Drawing命名空间,这个命名空间基本上是对GDI+(Graphic Devices Inteface plus)的封装。我们来看看怎么使用.NET画图。
1,先创建一个画布(Graphics)
GDI+是对显示器/打印机的图形输出设备的包装,通过GDI+我可以使用抽象语言输出图形,而不考虑硬件的驱动等细节。要画图先要有画布(其实是个输出设备),在.NET中我们用Graphics来表示这个画布。MSDN对Graphics类的解释是:Encapsulates a GDI+ drawing surface.
我们一般有两种方法创建画布(Graphics):
1,使用Graphics的静态方法,从Image,窗口来创建Graphics。
1
2
3
4
5
6
7
//create graphics over window
var frmGraphics = new frmGraphics();
Graphics g = Graphics.FromHwnd(frmGraphics.Handle);
//create graphics over image
var img = Image.FromFile(@"C:\Users\a.png");
Graphics g2 = Graphics.FromImage(img);
//create graphics over window
var frmGraphics = new frmGraphics();
Graphics g = Graphics.FromHwnd(frmGraphics.Handle);
//create graphics over image
var img = Image.FromFile(@"C:\Users\a.png");
Graphics g2 = Graphics.FromImage(img);
2,使用.NET控件的CreateGraphics方法
Graphics g = pictureBox1.CreateGraphics();
1
Graphics g = pictureBox1.CreateGraphics();
2,画出图形
我们可以用两种方式表示一个图形,用笔(Pen)勾画出形状。我们还可以用刷子(Brush)填充出这个形状,由些绘画API有分为两类,一类是勾画,这类API特点是都以Draw开头:
1
2
3
4
5
6
7
8
9
10
11
12
g.DrawArc(redPen, rect, 125, 40);                 //弧
g.DrawBezier(redPen, p1, p2, p3, p5);             //Bezier曲线
g.DrawClosedCurve(redPen, points);                //闭合曲线
g.DrawCurve(redPen, points);                      //曲线
g.DrawEllipse(redPen, rect);                      //椭圆,当长宽比为1:1时即为圆
g.DrawLine(redPen, p1, p4);                       //线段
g.DrawLines(redPen, points);                      //点连成的线段
g.DrawPath(redPen, new GraphicsPath());           //由直线和曲线连成的路径
g.DrawPie(redPen, rect, 90, 45);                  //饼状图
g.DrawPolygon(redPen, points);                    //多边形
g.DrawRectangle(redPen, rect);                    //方形
g.DrawString("Cicle", new Font("Arial", 15), brush, p4);
g.DrawArc(redPen, rect, 125, 40);                 //弧
g.DrawBezier(redPen, p1, p2, p3, p5);             //Bezier曲线
g.DrawClosedCurve(redPen, points);                //闭合曲线
g.DrawCurve(redPen, points);                      //曲线
g.DrawEllipse(redPen, rect);                      //椭圆,当长宽比为1:1时即为圆
g.DrawLine(redPen, p1, p4);                       //线段
g.DrawLines(redPen, points);                      //点连成的线段
g.DrawPath(redPen, new GraphicsPath());           //由直线和曲线连成的路径
g.DrawPie(redPen, rect, 90, 45);                  //饼状图
g.DrawPolygon(redPen, points);                    //多边形
g.DrawRectangle(redPen, rect);                    //方形
g.DrawString("Cicle", new Font("Arial", 15), brush, p4);
填充的API都是以Fill开头,基本用法跟上面类似,唯中的区别就是以Brush来代替Pen
g.FillClosedCurve(brush, points);g.FillEllipse(brush, rect);
g.FillRegion(brush, new Region(rect));
g.FillPie(brush, rect, 90, 100);
1
2
3
4
g.FillClosedCurve(brush, points);
g.FillEllipse(brush, rect);
g.FillRegion(brush, new Region(rect));
g.FillPie(brush, rect, 90, 100);
3,处理图像
Graphics有两类方法用来处理图像:
g.DrawIcon(icon, rect);g.DrawImage(image, p1);
g.DrawImageUnscaledAndClipped(image, p2);
1
2
3
g.DrawIcon(icon, rect);
g.DrawImage(image, p1);
g.DrawImageUnscaledAndClipped(image, p2);
DrawIcon, DrawImage将图标或图像显示在输出设备(Graphics)上。
4,截屏
Graphics类还提供了一个截图的方法CopyFromScreen,我们可以利用这个方法来截取屏幕:
g.CopyFromScreen(new Point(0, 0), new Point(100, 100), sz);
1
g.CopyFromScreen(new Point(0, 0), new Point(100, 100), sz);
5,其它
1,抗锯齿
g.SmoothingMode = SmoothingMode.AntiAlias;
1
g.SmoothingMode = SmoothingMode.AntiAlias;
2,画布的大小
g.VisibleClipBounds.Width;g.VisibleClipBounds.Height;
1
2
g.VisibleClipBounds.Width;
g.VisibleClipBounds.Height;
2,画布的变换(Transform)
var img = Image.FromFile(@"C:\Users\message.png");g.RotateTransform(45);
g.ScaleTransform(0.5F, 0.5F);
g.DrawImage(img, p1);
1
2
3
4
var img = Image.FromFile(@"C:\Users\message.png");
g.RotateTransform(45);
g.ScaleTransform(0.5F, 0.5F);
g.DrawImage(img, p1);
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# GDI 图形程序设计
使用GDI+对图像处理的一些C#代码
头像+国旗生成教程【附软件源码】
双缓冲技术(基于GDI+实现)
C# LinearGradientBrush 颜色渐变画刷的使用
【转】java中的图片旋转
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服