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

本文关键字:像素 像素数 数据 原始 复制 | 更新日期: 2023-09-27 18:11:30

我正在尝试将位图的像素复制到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。复制,但它需要像素作为一个数组,我想避免另一个复制。

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

你可以使用Windows API CopyMemory - Alias " rtlmovemmemory "。比所有LockBits的东西快多了…

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

如果你谈论的是那种每个CPU周期都计数的边缘效率,你最好直接使用数据指针和unsafe代码。

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