Pracuję nad projektem uniwersyteckim i utknąłem z problemem pamięci. załadować bitmapę, która trwa około 1,5GB na HDD z kodem poniżej:Przetwarzanie na dużych bitmapach (do 3 GB)
Bitmap bmp = new Bitmap(pathToFile);
Problem jest, że obiekt Bitmap nowo utworzony wykorzystuje około 3,5GB pamięci RAM, która jest coś nie mogę zrozumieć (to naprawdę duże opakowanie: E). Muszę dostać się do tablicy pikseli, a użycie klasy Bitmap jest naprawdę pomocne (później używam metody LockBits() i przetwarzam bajt tablicy na bajt), ale w tym przypadku jest to totalna blokada. Oto moje pytanie:
Czy istnieje prosty sposób na wyodrębnienie macierzy pikseli bez pożyczania dodatkowych 2 GB?
Używam C# tylko do wyodrębnienia potrzebnej tablicy, która jest później przetwarzana w języku C++ - może mogę wyodrębnić wszystkie potrzebne dane w języku C++ (ale pojawia się problem z konwersją - koncentruję się na formacie 24bgr)?
PS: Muszę zachować całą bitmapę w pamięci, więc podzielenie jej na części nie jest rozwiązaniem.
PS2: Tylko w celu wyjaśnienia niektórych problemów: Znam różnicę między rozszerzeniem pliku a formatem pliku. Załadowany plik jest nieskompresowany w postaci mapy bitowej 3 bajty na piksel o rozmiarze ~ 1.42GB (16k x 32k pikseli), dlaczego obiekt Bitmap jest ponad dwa razy większy? Wszelkie problemy z dekompresją i konwersja do innego formatu nie mają miejsca.
Możliwy duplikat: [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
@Jason: Tak, ale to pytanie nie ma odpowiedzi. Nie wiem, dlaczego nadzorowali pliki mapowane w pamięci. –
Jakie kodowanie wykorzystuje bitmapa? Czy jest kompresja RLE? –