【问题标题】:How do I draw simple graphics in C#?如何在 C# 中绘制简单的图形?
【发布时间】:2009-08-19 21:32:33
【问题描述】:

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

【问题讨论】:

    标签: c# .net graphics directx 2d


    【解决方案1】:

    正如其他人所说,请查看System.Drawing。 (为了完整起见,我只是重复一遍。) System.Drawing 将 GDI+ Windows 绘图库公开给您的应用程序。

    可以在C# Corner 找到帮助您快速开始使用 System.Drawing 和 GDI+ 的好教程。

    需要注意的一些重要事项:

    1. 许多 GDI+ 对象实现 IDisposable 接口,因此应包装在 using 块中。确保遵守适当的处置约定;未能释放 GDI+ 对象可能会给您的应用程序带来非常糟糕的副作用。 (.NET 中的 GDI+ 对象对应于它们的底层 Windows API 等效项。)
    2. DirectX 等 API 极其复杂,这是有充分理由的。它们不是为简单的形状而设计的,而是为复杂、高性能和高度交互的多媒体应用程序而设计的。 (换句话说,通常是游戏。)您可以通过托管 DirectX 界面访问 DirectX,但同样,对于您的直接目的而言,这可能是矫枉过正。
    3. 如果您对使用 DirectX 的更简单方法感兴趣,XNA 是您的最佳选择。但是,这在很大程度上是一个特定于游戏的库,而且很可能是矫枉过正。我参加聚会有点晚了,但根据下面的 cmets,这根本不再支持。 (这是有道理的;我已经很多年没有听说过它了。)

    【讨论】:

    • "根据 2013 年 1 月 31 日发送的电子邮件,XNA 不再积极开发,并且在 Windows 8 的新“Metro 接口”层下不支持在 Windows RT 平台上也不行。” Quote from Wikipedia
    • 也许看看unity3d 它有很好的教程和免费的独立/个人许可证。或查看reddit
    • 我不推荐 GDI+ 也不推荐 System.Drawing 我在这里是因为 FillRectangle 太慢了,而且它会慢慢调用底层的 SafeNativeMethods GDI+ (Gdip) FillRectangle 太慢而无法使用。这是 2017 年,我正在与一个简单的 FillRectangle 标准函数作斗争,你在开玩笑吗。
    • github.com/mono/sysdrawing-coregraphics 是 System.Drawing 在 macOS 的 CoreGraphics 之上的一个端口。
    【解决方案2】:

    这是一个简单的代码示例,可以帮助您入门(假设您有一个名为 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;
    

    图形对象还有很多其他的绘图方法,Intellisense 会告诉你如何调用它们。

    【讨论】:

      【解决方案3】:

      了解 GDI、GDI+、System.Drawing 命名空间,例如 here
      DirectX 不是你用来绘制简单形状的东西,而是用来渲染复杂的 3D 东西,而且,在 C# 下使用 DX Api 有点棘手(虽然不是那么难)。

      【讨论】:

        【解决方案4】:

        【讨论】:

          【解决方案5】:

          在 C# Windows 窗体(也包括 VB.Net)中实现 2D 图形的最佳方式是通过 JavaScript 语言使用 CefSharp 和 Canvas API。 Canvas 比笨重的 GDI+ 更好更快

          【讨论】:

            【解决方案6】:

            查看 System.Drawing 命名空间

            【讨论】:

              【解决方案7】:

              在 .NET 中查找 托管 Direct3D 图形 API Source

              【讨论】:

                【解决方案8】:

                您需要使用 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

                【讨论】:

                • 你不能实例化一个新的Image,但是你可以实例化一个新的Bitmap。
                • 啊,是的,感谢您的澄清。我知道,但忘记了。
                【解决方案9】:

                GDI+ 使用 System.Drawing

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-12-01
                  • 1970-01-01
                  • 2014-09-23
                  • 1970-01-01
                  • 2019-04-27
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多