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