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。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM