我只想在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