是的,我编写了一个Windows Forms控件,包装了DirectX 9.0,并提供了对视频表面的直接像素级别操作。
实际上,我在Stack Overflow上写了另一篇帖子,询问是否有其他更好的方法:Unsafe C# and pointers for 2D rendering, good or bad?
虽然它相对高性能,但它需要使用指针来有效地访问内存,因此需要使用不安全的编译器选项。这就是为什么会有早期的帖子。
这是所需步骤的高级别概述:
锁定
后台缓冲表面并将返回的指针存储到表面内存的起始位置。解锁
后台缓冲表面。呈现表面。请注意,采用这种方法时,您需要非常小心地检查目标表面的当前显示模式(音高和每像素位数)。此外,在程序运行时,您还需要制定应对窗口调整或屏幕格式更改的策略。
Managed DirectX (Microsoft.DirectX namespace) 可以提升 3D 图形的速度。它是一个稳定的 .NET 封装,覆盖了 DirectX API,但创建 .NET 对象和 marshalling 会有一定的性能损失。除非你正在编写一个功能齐全的现代 3D 引擎,否则它可以正常工作。
Window Presentation Foundation (WPF) (Windows.Media namespace) - 最适合 2D 图形的选择。也具有有限的 3D 能力。旨在用矢量、硬件加速、分辨率无关的框架取代 Windows Forms。非常方便,支持多种自定义控件、资源、数据绑定、事件和命令... 但也有一些 WTFs。速度通常比 GDI 快,比 DirectX 慢,并且很大程度上取决于你如何处理事情(看到某些东西在以明智的方式重写后运行速度快了 60 倍)。我们成功地在单个(不是最好的)PC 上实现了 3 个 1280x1024 的屏幕上满载实时指标、图形和绘图。