скопировать необработанные данные пикселей в C # - PullRequest
0 голосов
/ 14 октября 2011

Я пытаюсь скопировать пиксели растрового изображения в текстуру 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 ]

1 голос
/ 14 октября 2011

Вы можете использовать Windows API CopyMemory - Псевдоним "RtlMoveMemory".Гораздо быстрее, чем все эти вещи с LockBits ...

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

1 голос
/ 14 октября 2011

Если вы говорите об эффективности, когда важен каждый цикл ЦП, вам лучше просто использовать указатель данных непосредственно с кодом unsafe.

Реального быстрого способасопоставить плоский массив с фактическим управляемым объектом, таким как Array, вам придется в значительной степени копировать байт данных пикселя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...