我只想在C#中繪製簡單的2D對象,如圓形,直線,方形等。我怎麼做?回到Turbo C++時代,我記得初始化一些圖形庫也是這樣做的。我是否需要在.NET中做類似的事情? 3D對象有什麼不同?像DirectX這樣的事情會讓這更容易嗎?任何教程或示例的鏈接非常感謝。如何在C#中繪製簡單的圖形?
回答
正如其他人所說,退房System.Drawing。 (我只重複完整性。)System.Drawing將Windows繪圖庫公開給您的應用程序。
一個很好的教程,讓你啓動System.Drawing和GDI +可以在C# Corner找到。
一些重要事項需要注意:
- 許多GDI +對象實現了IDisposable接口,因此應該被包裹在
using
塊。確保你遵循適當的處置慣例;未能處置GDI +對象可能會導致您的應用程序出現非常令人討厭的副作用。 (.NET中的GDI +對象對應於它們的基礎Windows API等價物)。 - DirectX等API非常複雜,並且有很好的理由。它們不是爲了簡單的形狀而設計的,而是針對複雜,高性能和高度互動的多媒體應用。 (換句話說,通常是遊戲)。您可以通過Managed DirectX界面訪問DirectX,但是,爲了您的直接目的,這可能是過度的。
- 如果您對使用DirectX更簡單的方法感興趣,則需要XNA。然而,這是一個特定於遊戲的圖書館,並且可能是過度的。我對晚會有點遲,但根據下面的評論,這不再支持。 (這是有道理的,多年以來我一直沒有聽說過。)
退房System.Drawing命名空間:http://msdn.microsoft.com/en-us/library/system.drawing.aspx
看那System.Drawing命名空間
您需要使用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
你不能實例化一個新的形象,但你可以實例化一個新的位圖。 – MusiGenesis 2009-08-19 21:39:50
啊,是的,謝謝澄清。我知道,但忘了。 – 2009-08-20 03:35:53
閱讀有關GDI,GDI +,System.Drawing命名空間,例如here。
DirectX並不是您用來繪製簡單形狀的東西,而是渲染複雜的3D東西,而且,在C#下使用DX Api有點棘手(雖然不那麼難)。
在.NET 查找託管Direct3D圖形APISource
這裏,將讓你開始一個簡單的代碼示例(假定你有一個名爲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;
圖形對象擁有一堆其他的繪製方法,以及智能感知會告訴你如何給他們打電話。
GDI + 使用System.Drawing中
- 1. 在QML中繪製簡單條形圖
- 2. 如何在C#中繪製熱圖形?
- 3. 如何在C#中繪製XY圖形?
- 4. 繪製簡單的圓形
- 5. 在c中繪製圖形
- 6. 如何在iPhone上繪製簡單的線條動態圖形
- 7. 用C++繪製圖形和圖表的自由簡單方法?
- 8. 如何在沒有表單的C#中繪製圖形
- 9. 如何在C#中爲DCRAW製作簡單的圖形界面
- 10. 在C++中繪製形狀的簡單方法?
- 11. 如何在GTK中進行簡單的形狀繪製?
- 12. 如何使用UIBezierPath在目標c中製作簡單圖形?
- 13. 如何根據簡單的多邊形繪製圖像?
- 14. 如何使用react js繪製簡單的sparkline圖形?
- 15. 在java中繪製一個簡單的2D圖形
- 16. 在C中繪製圖形(Ubuntu的)
- 17. 簡單的控制檯圖形C
- 18. 如何在c中的圖片框上繪製圖形#
- 19. 如何使用c繪製圖形?
- 20. 如何在簡單的C++/opengl中繪製AABB邊界框?
- 21. C#中繪製圖元的圖形庫?
- 22. 如何在Java/Android-Studio中繪製簡單的可重繪矩形?
- 23. 在Swing中繪製簡單線條圖
- 24. 簡單的Java 2D圖形:繪製一個矩形?
- 25. 無法用3D圖形繪製簡單的四邊形
- 26. three.js所繪製簡單的三角形
- 27. DirectX11繪製簡單的三角形
- 28. 使用zedGraph在C#中繪製圖形
- 29. 在C++窗口中繪製圖形
- 30. 在C#中繪製圖形WPF
「根據2013年1月31日發送的電子郵件,** XNA不再被積極開發**,它不受Windows 8的新」Metro接口「層和Windows RT平臺的支持。」 [https://zh.m.wikipedia.org/wiki/Microsoft_XNA] – klaas 2015-12-03 23:33:32
也許看看[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
我不推薦GDI +和System.Drawing我在這裏,因爲FillRectangle太慢了,它慢慢調用底層SafeNativeMethods GDI +(Gdip)FillRectangle太慢而無用。這是2017年,我正在對付簡單的FillRectangle標準功能,你在開玩笑嗎? – hamish 2017-01-02 23:41:28