У меня есть несколько (~ 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
Я прекрасно понимаю, что это не так работа, это просто пример того, чего я в основном хочу достичь.