是否有另一种方法可以在C {#{3}}和GDI+之外呈现图形?
(用于开发瓷砖地图编辑器。)
答案 0 :(得分:8)
答案 1 :(得分:3)
是的,我编写了一个Windows窗体控件,它包装了DirectX 9.0并提供了对视频表面的直接像素级操作。
我实际上在Stack Overflow上写了另一篇文章,询问是否还有其他更好的方法: Unsafe C# and pointers for 2D rendering, good or bad?
虽然性能相对较高,但它需要不安全的编译器选项,因为它使用指针有效地访问内存。因此,这个早期帖子的原因。
这是所需步骤的高级别:
Lock
后备缓冲区
表面并将返回的指针存储到曲面的起点
存储器中。Unlock
后缓冲区表面。展示表面。请注意,采用这种方法时,您需要非常小心地检查目标表面的当前显示模式(间距和每个像素的位数)。此外,您还需要制定策略来处理窗口大小调整或在程序运行时更改屏幕格式。
答案 2 :(得分:2)
托管DirectX(Microsoft.DirectX命名空间)以获得更快的3D图形。它是一个坚实的.NET包装程序,而不是DirectX API,它在创建.NET对象和编组时会带来一些性能损失。除非你正在编写一个功能齐全的现代3D引擎,否则它将正常工作。
Window Presentation Foundation(WPF)(Windows.Media命名空间) - 2D图形的最佳选择。 3D技能也有限。旨在用向量替换Windows窗体,硬件加速与分辨率无关的框架。非常方便,支持几种风格的自定义控件,资源,数据绑定,事件和命令......还有一些WTF。速度通常比GDI快,并且比DirectX慢,并且在很大程度上取决于你的工作方式(在以合理的方式重写之后看到工作速度提高了60倍)。我们成功地在一台(而不是最好的)PC上实现了3个1280x1024屏幕,其中包含实时指标,图形和图表。
答案 3 :(得分:1)
您可以尝试使用Visual Studio和/或Expression Blend查看WPF。我不确定你想要多么复杂,但它应该能够处理一个简单的编辑器。有关详细信息,请查看此MSDN Article。
答案 4 :(得分:0)
您可以查看Cairo graphics library。 Mono项目具有C#的绑定。
答案 5 :(得分:0)
Cairo是一个选项。我目前正在使用GDI +和Cairo重写我的绘图软件。它有一个瓦片地图生成器,以及其他功能。