Я работаю над каким-то университетским проектом и застрял в проблеме памяти. я загружаю картинки, которая занимает около 1,5GB на HDD с кодом ниже:Обработка на больших растровых изображениях (до 3 ГБ)
Bitmap bmp = new Bitmap(pathToFile);
Вопрос заключается в том, что вновь созданный объект Bitmap использует около 3,5GB оперативной памяти, которая является то, что я не могу понять (это действительно БОЛЬШОЙ оберткой: E). Мне нужно получить массив пикселей, и использование класса Bitmap действительно полезно (позже я использую метод LockBits() и обрабатываю байты массива на каждый байт), но в этом случае это полный блокиратор. Итак, вот мой вопрос:
Есть ли простой способ извлечь матрицу пикселей без предоставления дополнительных 2gb?
Я использую C# только для извлечения необходимого массива, который позже обрабатывается в C++ - возможно, я могу извлечь все необходимые данные в C++ (но проблема с конверсией появляется здесь - я концентрируюсь на формате 24bgr)?
PS: Мне нужно сохранить все растровое изображение в памяти, поэтому разделение его на части не является решением.
PS2: Просто для выяснения некоторых проблем: Я знаю разницу между расширением файла и форматом файла. Загруженный файл является несжатым растровым изображением 3 байта на пиксель размером ~ 1.42GB (16k x 32k пикселей), поэтому почему объект Bitmap более чем в два раза больше? Любые проблемы с распаковкой и конвертирование в другой формат не происходит.
Возможные дубликат: [http://stackoverflow.com/questions/569889/how-do- i-use-large-bitmaps-in-net? rq = 1] (http://stackoverflow.com/questions/569889/how-do-i-use-large-bitmaps-in-net?rq=1) – Jason
@ Джейсон: Да, но этот вопрос не имеет реального ответа. Не знаю, почему они контролируют файлы с отображением памяти. –
Какая кодировка использует растровое изображение? Есть ли RLE-сжатие? –