Sto lavorando a un progetto universitario e sono rimasto bloccato con problemi di memoria. carico un bitmap che impiega circa 1,5 GB su HDD con codice qui sotto:Elaborazione su bitmap di grandi dimensioni (fino a 3 GB)
Bitmap bmp = new Bitmap(pathToFile);
Il problema è che l'oggetto appena creato Bitmap utilizza circa 3,5GB di RAM che è qualcosa che non riesco a capire (che è involucro davvero GRANDE: E). Ho bisogno di arrivare all'array di pixel, e l'uso della classe Bitmap è davvero utile (utilizzo il metodo LockBits() in un secondo momento ed elabora l'array byte per byte) ma in questo caso è il blocker totale. Quindi, ecco la mia domanda:
C'è un modo semplice per estrarre l'array di pixel senza prestare ulteriori 2 GB?
Sto usando C# solo per estrarre l'array necessario, che verrà successivamente elaborato in C++ - forse posso estrarre tutti i dati necessari in C++ (ma il problema di conversione appare qui - mi sto concentrando sul formato 24bgr)?
PS: Ho bisogno di mantenere l'intera bitmap in memoria in modo da dividerlo in parti non è una soluzione.
PS2: Giusto per chiarire alcuni aspetti: conosco la differenza tra estensione del file e formato del file. Il file caricato è bitmap non compresso di 3 byte per pixel di dimensioni di ~ 1.42 GB (16k x 32k pixel), quindi perché l'oggetto Bitmap è più di due volte più grande? Non sono in corso problemi di decompressione e conversione in altri formati.
Eventuali duplicati: [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: Sì, ma quella domanda non ha una risposta reale. Non so perché hanno supervisionato i file mappati in memoria. –
Quale codifica utilizza la bitmap? C'è una compressione RLE? –