首页 / 知识

关于gdi:用C#渲染图形

2023-04-15 01:56:00

关于gdi:用C#渲染图形

Rendering graphics in C#

除了GDI和XNA之外,还有其他方法可以用C#渲染图形吗?

(用于瓷砖地图编辑器的开发。)


SDL.NET是我喜欢的解决方案。如果需要3D,可以使用Tao.OpenGL在其中进行渲染。它是快速的行业标准(即SDL)和跨平台的产品。


是的,我编写了一个Windows Forms控件,该控件packageDirectX 9.0并提供了对视频表面的直接像素级操作。

我实际上在Stack Overflow上写了另一篇文章,询问是否还有其他更好的方法:不安全的C#和2D渲染的指针,好还是坏?

尽管它具有较高的性能,但它需要使用不安全的编译器选项,因为它使用指针来有效地访问内存。因此,发表此较早文章的原因。

这是必不可少的必要步骤:

  • 下载DirectX SDK。
  • 创建一个新的C#Windows Forms项目并引用已安装的项目
    Microsoft DirectX程序集。
  • 使用Presentation Parameters初始化一个新的DirectX Device对象
    (窗口式,后退缓冲等)。
  • 创建设备,注意记录表面" Pitch"并
    当前显示模式(每像素位数)。
  • 当您需要显示某些内容时,Lock
    Surface并将返回的指针存储到Surface的起点
    记忆。
  • 使用指针算法,计算出像素中的实际像素位置
    基于表面间距的数据
    每像素位数和实际的x / y像素坐标。
  • 为了简单起见,我坚持使用32bpp,这意味着设置像素非常简单:*(surfacePointer(y * pitch x))= Color.FromARGB(255,0,0);
  • 完成绘制后,Unlock后缓冲表面。呈现表面。
  • 根据需要从步骤5重复。
  • 请注意,采用这种方法时,您需要非常仔细地检查目标表面的当前显示模式(每像素的间距和位数)。另外,在程序运行时,您还需要制定策略来处理窗口大小调整或屏幕格式更改。


    • 托管的DirectX(Microsoft.DirectX命名空间),用于更快的3D图形。它是DirectX API的可靠.NETpackage器,在创建.NET对象和编组时会降低性能。除非您正在编写功能齐全的现代3D引擎,否则它将无法正常工作。

    • Window Presentation Foundation(WPF)(Windows.Media命名空间)-2D图形的最佳选择。还具有有限的3D功能。旨在将Windows窗体替换为矢量,独立于硬件的,与分辨率无关的加速框架。非常方便,支持多种类型的自定义控件,资源,数据绑定,事件和命令...还具有一些WTF。速度通常比GDI快,但比DirectX慢,并且在很大程度上取决于您的处理方式(以合理的方式重写后,看到某项内容的工作速度提高了60倍)。我们在一台(并非最佳)PC上实现了3个1280x1024屏幕的实时指示符,图形和图表的成功。


    您可以尝试使用Visual Studio和/或Expression Blend查看WPF。我不确定您要提高的水平,但是它应该能够处理一个简单的编辑器。查看此MSDN文章以获取更多信息。


    开罗是一个选择。我目前正在使用GDI和Cairo重写我的地图软件。除其他功能外,它还具有切片地图生成器。


    您可能会研究Cairo图形库。 Mono项目具有C#的绑定。


    图形编辑器方法控件

    最新内容

    相关内容

    猜你喜欢