关于gdi:用C#渲染图形

关于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#的绑定。


    推荐阅读

      linux纯命令行图形?

      linux纯命令行图形?,系统,地址,电脑,密码,图形界面,上会,地方,工具,工作,环

      linux使用命令的方法?

      linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,

      linux图形转字符命令?

      linux图形转字符命令?,系统,电脑,密码,界面,情况,地方,工具,图形界面,字符,

      linux命令行图形编程?

      linux命令行图形编程?,系统,不了,情况,密码,工具,地方,百度,管理,图形界面,

      linux图形化命令行?

      linux图形化命令行?,系统,密码,电脑,流程,图形界面,管理,工具,图片,上会,界

      linux命令编辑器与?

      linux命令编辑器与?,环境,档案,标的,数字,名称,数据,正规,名字,命令,光标,Lin

      linux编辑器保存命令?

      linux编辑器保存命令?,状态,网络,系统,电脑,命令,编辑,文件,位置,终端,模式,l

      linux图形化的命令?

      linux图形化的命令?,软件,系统,密码,官网,环境,图形界面,界面,终端,命令,窗

      linux命令行运行图形?

      linux命令行运行图形?,系统,密码,电脑,流程,工具,地方,代码,软件,环境,工作,

      linux图形切换命令?

      linux图形切换命令?,系统,密码,代码,电脑,工具,环境,工作,图形界面,界面,字

      linux命令和图形切换?

      linux命令和图形切换?,系统,密码,地址,工具,电脑,工作,地方,软件,命令,能存,l

      linux进图形化命令?

      linux进图形化命令?,系统,密码,电脑,图形界面,软件,环境,位置,界面,终端,命

      linux转换图形命令?

      linux转换图形命令?,系统,工作,密码,工具,地址,命令,地方,环境,软件,信息,Lin

      linux命令行绘制图形?

      linux命令行绘制图形?,系统,衍生,地址,图形界面,工作,环境,代码,工具,命令,

      linux命令输入方法?

      linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,lin

      linux图形打开命令?

      linux图形打开命令?,系统,密码,电脑,位置,地方,代码,市场,一致,环境,联系方

      python免费编辑器?

      python免费编辑器?,代码,项目,分析,智能,平台,技术,庞大,公司,功能,插件,Pyth