当前位置:  开发笔记 > 编程语言 > 正文

不安全的C#和2D渲染的指针是好是坏?

如何解决《不安全的C#和2D渲染的指针是好是坏?》经验,为你挑选了1个好方法。

我正在编写一个包装DirectX 9的C#控件,并提供简化的界面来执行2D像素级绘制。.NET要求我将此代码包装在不安全的代码块中,并使用allow unsafe code选项进行编译。

我要锁定整个表面,然后将指针返回到内存的锁定区域。然后,我可以使用“简单”指针算法直接写入像素数据。我已经对此性能进行了测试,发现与已知的其他“安全”方法相比,速度有了显着提高。

这是在C#.NET应用程序中处理单个像素的最快方法吗?有没有更好,更安全的方法?如果有一种不需要指针操作的同样快速的方法,那么我倾向于使用它。

(我知道这是2008年,我们都应该使用DirectX 3D,OpenGL等,但是此控件仅用于2D像素渲染,而根本不需要3D渲染。)



1> Corey Ross..:

使用不安全的指针是在C#中进行直接内存操作的最快方法(肯定比使用元帅包装函数要快)。

出于好奇,您尝试执行哪种2D绘图操作?

我之所以问是因为锁定DirectX表面以进行像素级操作会挫败您希望通过使用DirectX获得的大多数硬件加速优势。另外,在终端服务(远程桌面)上使用DirectX设备时,初始化将失败,因此该控件在该情况下将无法使用(这可能对您没有影响)。

DirectX在绘制大三角形和变换图像(将纹理映射到四边形)时将是一个巨大的胜利,但是使用单像素操作并不能真正实现如此出色的效果。

停留在.NET领域,一种替代方法是使用LockBits保持Bitmap对象充当您的表面,并通过返回的BitmapData对象中的不安全指针直接访问像素。

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有