博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#画图
阅读量:5076 次
发布时间:2019-06-12

本文共 2196 字,大约阅读时间需要 7 分钟。

在.NET下面画图需要用到System.Drawing命名空间,这个命名空间基本上是对GDI+(Graphic Devices Inteface plus)的封装。我们来看看怎么使用.NET画图。

 

1,先创建一个画布(Graphics)

GDI+是对显示器/打印机的图形输出设备的包装,通过GDI+我可以使用抽象语言输出图形,而不考虑硬件的驱动等细节。要画图先要有画布(其实是个输出设备),在.NET中我们用来表示这个画布。MSDN对Graphics类的解释是:Encapsulates a GDI+ drawing surface.

我们一般有两种方法创建画布(Graphics):

1,使用Graphics的静态方法,从Image,窗口来创建Graphics。

//create graphics over windowvar frmGraphics = new frmGraphics();Graphics g = Graphics.FromHwnd(frmGraphics.Handle);//create graphics over imagevar img = Image.FromFile(@"C:\Users\a.png");Graphics g2 = Graphics.FromImage(img);

 

2,使用.NET控件的CreateGraphics方法

Graphics g = pictureBox1.CreateGraphics();

 

2,画出图形

我们可以用两种方式表示一个图形,用笔(Pen)勾画出形状。我们还可以用刷子(Brush)填充出这个形状,由些绘画API有分为两类,一类是勾画,这类API特点是都以Draw开头:

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);

 

3,处理图像

Graphics有两类方法用来处理图像:

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);

 

5,其它

1,抗锯齿

g.SmoothingMode = SmoothingMode.AntiAlias;

 

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);

转载于:https://www.cnblogs.com/Jerry-Chou/archive/2012/03/20/2408064.html

你可能感兴趣的文章
32位与64位 兼容编程
查看>>
iframe父子页面通信
查看>>
ambari 大数据安装利器
查看>>
java 上传图片压缩图片
查看>>
magento 自定义订单前缀或订单起始编号
查看>>
ACM_拼接数字
查看>>
计算机基础作业1
查看>>
Ubuntu 深度炼丹环境配置
查看>>
C#中集合ArrayList与Hashtable的使用
查看>>
从一个标准 url 里取出文件的扩展名
查看>>
map基本用法
查看>>
poj-1163 动态规划
查看>>
Golang之interface(多态,类型断言)
查看>>
Redis快速入门
查看>>
BootStrap---2.表格和按钮
查看>>
Linear Algebra lecture 2 note
查看>>
CRC计算模型
查看>>
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>