我正在尝试将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,但它需要像素作为一个数组,我想避免另一个副本当然。
答案 0 :(得分:1)
如果你在谈论每个CPU周期都在计算的出血边缘效率,你最好只使用unsafe
代码直接使用数据指针。
没有真正快速的方法将平面数组映射到像Array
这样的实际托管对象上,你必须逐字节地复制像素数据。
答案 1 :(得分:1)
您可以使用Windows API CopyMemory - Alias“RtlMoveMemory”。比所有LockBits的东西快得多......