2009-08-19 64 views
14

我只想在C#中繪製簡單的2D對象,如圓形,直線,方形等。我怎麼做?回到Turbo C++時代,我記得初始化一些圖形庫也是這樣做的。我是否需要在.NET中做類似的事情? 3D對象有什麼不同?像DirectX這樣的事情會讓這更容易嗎?任何教程或示例的鏈接非常感謝。如何在C#中繪製簡單的圖形?

回答

16

正如其他人所說,退房System.Drawing。 (我只重複完整性。)System.Drawing將Windows繪圖庫公開給您的應用程序。

一個很好的教程,讓你啓動System.Drawing和GDI +可以在C# Corner找到。

一些重要事項需要注意:

  1. 許多GDI +對象實現了IDisposable接口,因此應該被包裹在using塊。確保你遵循適當的處置慣例;未能處置GDI +對象可能會導致您的應用程序出現非常令人討厭的副作用。 (.NET中的GDI +對象對應於它們的基礎Windows API等價物)。
  2. DirectX等API非常複雜,並且有很好的理由。它們不是爲了簡單的形狀而設計的,而是針對複雜,高性能和高度互動的多媒體應用。 (換句話說,通常是遊戲)。您可以通過Managed DirectX界面訪問DirectX,但是,爲了您的直接目的,這可能是過度的。
  3. 如果您對使用DirectX更簡單的方法感興趣,則需要XNA。然而,這是一個特定於遊戲的圖書館,並且可能是過度的。我對晚會有點遲,但根據下面的評論,這不再支持。 (這是有道理的,多年以來我一直沒有聽說過。)
+4

「根據2013年1月31日發送的電子郵件,** XNA不再被積極開發**,它不受Windows 8的新」Metro接口「層和Windows RT平臺的支持。」 [https://zh.m.wikipedia.org/wiki/Microsoft_XNA] – klaas 2015-12-03 23:33:32

+0

也許看看[unity3d](http://unity3d.com)它有很好的教程和免費的獨立/個人許可證。或者檢查這個[reddit](https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas 2015-12-03 23:46:11

+0

我不推薦GDI +和System.Drawing我在這裏,因爲FillRectangle太慢了,它慢慢調用底層SafeNativeMethods GDI +(Gdip)FillRectangle太慢而無用。這是2017年,我正在對付簡單的FillRectangle標準功能,你在開玩笑嗎? – hamish 2017-01-02 23:41:28

0

您需要使用GDI +。

你如何做到這一點取決於你想要畫的東西。您可以在控件或表單上繪圖,也可以在圖像對象上繪圖。無論哪種方式,您都需要一個System.Drawing.Graphics對象,我相信它位於System.Drawing.dll中。

您可以實例化一個新的Bitmap類並調用Graphics.FromImage(myImage),然後使用剛剛創建的Graphics對象上的方法進行繪製。如果您想在窗體或控件上繪製,只需重寫OnPaint方法並在EventArgs類中查找Graphics屬性即可。

上System.Drawing命名空間位置的更多信息:http://msdn.microsoft.com/en-us/library/system.drawing.aspx

+0

你不能實例化一個新的形象,但你可以實例化一個新的位圖。 – MusiGenesis 2009-08-19 21:39:50

+0

啊,是的,謝謝澄清。我知道,但忘了。 – 2009-08-20 03:35:53

2

閱讀有關GDI,GDI +,System.Drawing命名空間,例如here
DirectX並不是您用來繪製簡單形狀的東西,而是渲染複雜的3D東西,而且,在C#下使用DX Api有點棘手(雖然不那麼難)。

13

這裏,將讓你開始一個簡單的代碼示例(假定你有一個名爲pictureBox1圖片框):

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    g.DrawLine(new Pen(Color.Red), 0, 0, 10, 10); 
} 
pictureBox1.Image = bmp; 

圖形對象擁有一堆其他的繪製方法,以及智能感知會告訴你如何給他們打電話。

0

GDI + 使用System.Drawing中