2009-08-19 40 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中