У меня есть несколько (~ 2 ГБ) необработанных RGB файлов 24bpp на HDD.
Теперь я хочу получить часть его и масштабировать до нужного размера.
(Разрешены только допустимые размеры: 1, 1/2, 1/4, 1/8,..., 1/256)
Итак, я сейчас читаю каждую строку из прямоугольника интереса в массив, который оставляет меня с растровым изображением, которое имеет правильную высоту, но неправильную ширину.
В качестве следующего шага я создаю Bitmap из вновь созданного массива.
Это делается с помощью указателя, чтобы не было копирования данных.
Затем я вызываю GetThumbnailImage в Bitmap, который создает новое растровое изображение с правильными размерами.
Теперь я хочу вернуть необработанные пиксельные данные (как байтовый массив) вновь созданного растрового изображения. Но для этого я в настоящее время копирую данные с помощью LockBits в новый массив.
Итак, мой вопрос: Есть ли способ получить пиксельные данные из Bitmap в массив байтов без копирования?
Что-то вроде:
var bitmapData = scaledBitmap.LockBits(...)
byte[] rawBitmapData = (byte[])bitmapData.Scan0.ToPointer()
scaledBitmap.UnlockBits(bitmapData)
return rawBitmapData
Я хорошо знаю, что это не работает, это просто пример того, чего я в основном хочу достичь.