在.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。
//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);