Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于2D渲染的不安全C#和指针,好还是坏?_C#_Graphics_Pointers - Fatal编程技术网

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

用于2D渲染的不安全C#和指针,好还是坏?,c#,graphics,pointers,C#,Graphics,Pointers,我正在编写一个C#控件,它包装DirectX 9并提供一个简化的界面来执行2D像素级绘图。NET要求我将此代码包装在不安全的代码块中,并使用允许不安全代码选项进行编译 我锁定整个曲面,然后返回指向内存锁定区域的指针。然后,我可以直接使用“简单”指针算法写入像素数据。我已经对此进行了性能测试,发现与我所知道的其他“安全”方法相比,速度有了实质性的提高 这是在C#.NET应用程序中操作单个像素的最快方法吗?有更好、更安全的方法吗?如果有一种同样快速的方法不需要指针操作,那么我倾向于使用这种方法 (我

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

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

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


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

我最近被指派为我们的一个瘦客户端应用程序(C#)创建一个简单的直方图控件。我分析的图像大约是1200x1200,我必须走同样的路线。我可以让它自己画一次,没有问题,但是控制需要重新调整大小。我试图避免它,但我必须得到原始内存本身


我并不是说使用标准的.NET类是不可能的,但我最终还是无法让它正常工作。

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

出于好奇,您正在尝试执行哪种二维绘图操作

我这样问是因为锁定DirectX曲面以进行像素级操作将破坏您希望从使用DirectX中获得的大多数硬件加速好处。此外,当通过终端服务(远程桌面)使用DirectX设备时,该设备将无法初始化,因此该控件在该情况下将不可用(这对您可能无关紧要)

在绘制大三角形和变换图像(纹理映射到四边形)时,DirectX将是一个巨大的胜利,但在单像素操作中,它不会真正发挥那么大的作用


在.NET领域,一种替代方法是围绕位图对象作为曲面,使用锁定位并通过返回的BitmapData对象中的不安全指针直接访问像素。

是的,这可能是最快的方法


几年前,我不得不在像素级比较两幅1024x1024的图像;获取像素的方法需要2分钟,不安全扫描需要0.01秒。

我也使用了不安全来加速这种性质的事情。至少可以说,性能的提高是巨大的。这里的要点是,只要你知道自己在做什么,“不安全”就会关闭一些你可能不需要的东西


还有,看看。它是DirectX的二维图形组件。它真的很快。

那么你是如何得到指针的呢?:-)