其他提示
是的,我已经编写了一个 Windows 窗体控件,它封装了 DirectX 9.0 并提供了视频表面的直接像素级操作。
我实际上在 Stack Overflow 上写了另一篇文章,询问是否还有其他更好的方法: 不安全的 C# 和 2D 渲染指针,是好是坏?
虽然它的性能相对较高,但它需要不安全的编译器选项,因为它使用指针来有效地访问内存。这就是之前这篇文章的原因。
这是所需步骤的概要:
- 下载 DirectX SDK。
- 创建一个新的 C# Windows 窗体 项目并引用已安装的Microsoft DirectX组件。
- 初始化带有演示参数(窗口,背部缓冲等)的新的DirectX设备对象。
- 创建设备,小心记录表面“音高”和当前显示模式(每个像素的位)。
- 当你需要展示一些东西时,
Lock
反式表面并将返回的指针存储到表面存储器的开始。 - 使用指针算术,根据表面音高计算数据中的实际像素位置,每个像素和实际X/Y像素坐标。
- 在我的例子中,为了简单起见,我坚持使用 32 bpp,这意味着设置像素非常简单:*(surfacePointer + (y * 间距 + x))=Color.FromARGB(255,0,0);
- 画完后,
Unlock
后缓冲表面。呈现表面。 - 根据需要重复步骤 5。
请注意,采用这种方法时,您需要非常小心地检查目标表面的当前显示模式(每像素的间距和位数)。此外,您还需要制定一个策略来处理程序运行时窗口大小调整或屏幕格式更改。
托管 DirectX(Microsoft.DirectX 命名空间)可实现更快的 3D 图形。它是 DirectX API 上的可靠 .NET 包装器,但在创建 .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 重写我的地图软件。除其他功能外,它还具有瓷砖地图生成器。