C # Эффективное получение данных пикселей из System.Drawing.Bitmap

У меня есть несколько (~ 2 ГБ) необработанных файлов RGB с разрешением 24 бит на пиксель на жестком диске. Теперь я хочу получить часть из них и масштабировать до желаемый размер.
(Допускаются только масштабы 1, 1/2, 1/4, 1/8, ..., 1/256)

Итак, я сейчас читаю каждую строку из прямоугольника представляющий интерес, в массив, который оставляет мне растровое изображение с правильной высотой, но неправильной шириной.

В качестве следующего шага я создаю Bitmap из вновь созданного массива.
Это делается с помощью указателя, поэтому копирование данных не требуется.
Затем я вызываю GetThumbnailImage для растрового изображения, которое создает новое растровое изображение с правильными размерами.

Теперь я хочу вернуть необработанные пиксельные данные (в виде массива байтов) вновь созданного растрового изображения. Но для этого я сейчас копирую данные с помощью LockBits в новый массив.

Итак, мой вопрос: Есть ли способ получить данные пикселей из Bitmap в массив байтов, не копируя их?

Что-то вроде:

var bitmapData = scaledBitmap.LockBits(...)
byte[] rawBitmapData = (byte[])bitmapData.Scan0.ToPointer()
scaledBitmap.UnlockBits(bitmapData)
return rawBitmapData 

Я прекрасно понимаю, что это не так работа, это просто пример того, чего я в основном хочу достичь.

12
задан Arokh 10 September 2011 в 18:21
поделиться