Обработка больших растровых изображений (до 3 ГБ)

Я работаю над каким-то университетским проектом и столкнулся с проблемой памяти. Я загружаю растровое изображение, которое занимает около 1,5 ГБ на жестком диске, с кодом ниже:

Bitmap bmp = new Bitmap(pathToFile); 

Проблема в том, что вновь созданный объект Bitmap использует около 3,5 ГБ ОЗУ, чего я не могу понять (это действительно БОЛЬШАЯ оболочка: E ). Мне нужно добраться до массива пикселей, и использование класса Bitmap действительно полезно (позже я использую метод LockBits() и обрабатываю массив байт за байтом), но в этом случае это полная блокировка. Итак, вот мой вопрос:

Есть ли какой-нибудь простой способ извлечь массив пикселей без предоставления дополнительных 2 ГБ?

Я использую c# только для извлечения нужного массива, который затем обрабатывается в c++ — может быть, я могу извлечь все необходимые данные в c++ (но здесь возникает проблема преобразования — я концентрируюсь на формате 24bgr)?

PS: Мне нужно хранить все растровое изображение в памяти, поэтому разбиение его на части не является решением.

PS2: Просто чтобы прояснить некоторые вопросы: я знаю разницу между расширением файла и форматом файла. Загружаемый файл представляет собой несжатое растровое изображение размером 3 байта на пиксель размером ~ 1,42 ГБ (16k x 32k пикселей), так почему объект Bitmap более чем в два раза больше? Никаких проблем с распаковкой и преобразованием в другой формат не происходит.

6
задан Rafal Chmiel 17 June 2012 в 09:25
поделиться