如何在C#中绘制简单的图形?

msv*_*cyc 17 .net c# directx graphics 2d

我只想在C#中绘制简单的2D对象,如圆形,直线,方形等.我怎么做?回到Turbo C++时代,我记得初始化一些图形库是为了做同样的事情.我需要在.NET中做类似的事情吗?3D物体有什么不同吗?像DirectX这样的东西会让这更容易吗?任何指向教程或样本的链接都非常感谢.

Joh*_*udy 21

正如其他人所说,请查看System.Drawing.(我只是为了完整性而重复这一点.)System.Drawing将GDI + Windows绘图库暴露给您的应用程序.

可以在C#Corner找到一个很好的教程,让你快速启动System.Drawing和GDI + .

一些重要的注意事项:

  1. 许多GDI +对象实现了IDisposable接口,因此应该用using块包装.确保遵循适当的处置惯例; 未能处理GDI +对象可能会导致您的应用程序产生非常令人讨厌的副作用.(.NET中的GDI +对象对应于它们的基础Windows API等价物.)
  2. 像DirectX这样的API非常复杂,并且有充分的理由.它们的设计不是为了简单的形状,而是为了复杂,高性能和高度交互的多媒体应用.(换句话说,通常是游戏.)您可以通过Managed DirectX界面访问DirectX,但同样,它可能会因您的直接目的而过度杀伤.
  3. 如果您对使用DirectX更简单的方法感兴趣,那么XNA就是您的选择.然而,这是一个特定于游戏的图书馆,并且可能再次过度.我参加聚会有点晚了,但是根据下面的评论,这根本不再支持了.(这是有道理的;多年来我没有听说过任何关于它的事情.)

  • "根据2013年1月31日发送的电子邮件,**XNA不再正在开发**,并且在Windows 8的新"Metro界面"层和Windows RT平台上都不支持." [引自维基百科](https://en.m.wikipedia.org/wiki/Microsoft_XNA) (6认同)
  • 我不推荐 GDI+ 也不推荐 System.Drawing 我在这里是因为 FillRectangle 太慢了,它慢慢地调用底层 SafeNativeMethods GDI+ (Gdip) FillRectangle 太慢而无用。这是 2017 年,我在和一个简单的 FillRectangle 标准函数作斗争,你在开玩笑吧。 (2认同)

Mus*_*sis 14

这是一个简单的代码示例,可以帮助您入门(假设您有一个名为pictureBox1的PictureBox):

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;
Run Code Online (Sandbox Code Playgroud)

图形对象有许多其他绘图方法,Intellisense将向您展示如何调用它们.