在c#中复制原始像素数据

时间:2011-10-14 18:43:43

标签: c# copy unmanaged

我正在尝试将Bitmap的像素复制到DirectX纹理中。从两者中获取IntPtr很简单,但我如何有效地复制像素数据呢?

   var data = FBitmap.LockBits(..)
   var rect = texture.LockRectangle(0, LockFlags.None);

   IntPtr from = data.Scan0;
   IntPtr to = rect.Data.DataPointer;

   //copy data  

   texture.UnlockRectangle(0);
   FBitmap.UnlockBits(data);

我试图使用Marshal.Copy,但它需要像素作为一个数组,我想避免另一个副本当然。

2 个答案:

答案 0 :(得分:1)

如果你在谈论每个CPU周期都在计算的出血边缘效率,你最好只使用unsafe代码直接使用数据指针。

没有真正快速的方法将平面数组映射到像Array这样的实际托管对象上,你必须逐字节地复制像素数据。

答案 1 :(得分:1)

您可以使用Windows API CopyMemory - Alias“RtlMoveMemory”。比所有LockBits的东西快得多......

http://www.pinvoke.net/default.aspx/urlmon/CopyMemory.html