【发布时间】:2016-11-06 07:01:25
【问题描述】:
【问题讨论】:
-
大卫,刚刚注意到您的问题“理解指针”。好问题,好答案!该帖子中提到的所有要点也适用于我下面的“不安全”答案。
【问题讨论】:
【讨论】:
是的,我编写了一个 Windows 窗体控件,它封装了 DirectX 9.0 并提供对视频表面的直接像素级操作。
我实际上在 Stack Overflow 上写了另一篇文章,询问是否有其他更好的方法:Unsafe C# and pointers for 2D rendering, good or bad?
虽然它的性能相对较高,但它需要 unsafe 编译器选项,因为它使用指针来有效地访问内存。这就是之前这篇文章的原因。
这是一个高层次的必需步骤:
Lock 后备缓冲区
曲面并将返回的指针存储到曲面的开头
记忆。Unlock 后台缓冲区表面。呈现表面。请注意,采用这种方法时,您需要非常小心地检查目标表面的当前显示模式(间距和每像素位数)。此外,您还需要制定策略来在程序运行时处理窗口大小调整或屏幕格式更改。
【讨论】:
托管 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 Article 了解更多信息。
【讨论】:
您可以查看Cairo graphics library。 Mono 项目具有 C# 绑定。
【讨论】:
Cairo 是一个选项。我目前正在使用 GDI+ 和 Cairo 重写我的地图软件。它具有平铺地图生成器等功能。
【讨论】: