Domanda

Sto avendo un problema di memoria con un algoritmo che sto usando per "Appiattire" una pagina in un documento PDF.

HBITMAP hbmp = CreateDibSection(...);
ThirdPartyBmpManipulation(hbmp, "C:\\file.pdf", 0); //renders page 0 in file.pdf
void * hdib = ConvertBitmap(hbmp); //copy a Dib Section to a Dib
DeleteObject(hbmp); //frees the HBitmap while the Dib is now in memory

Il problema è che ho un molto grande bitmap e in alcuni casi non riesco a tenere il HBitmap in memoria, mentre io destinare l'DIB da copiare.

Quindi, si tratta di un lungo tiro, ma può in qualche modo assegnare la sezione DIB su disco e hanno ancora un HBITMAP per esso? (Utilizzare la stessa maniglia per la mia funzione ConvertBitmap)

È stato utile?

Soluzione

Qual è il modo di guasto? Tu dici "memoria fisica": Windows utilizza la memoria virtuale, sarà la pagina su disco, non c'è bisogno di preoccuparsi di rimanere a corto di memoria fisica al di là del calo di prestazioni. Se siete a corto di spazio di indirizzi, utilizzando il disco potrebbe non essere in grado di aiutarvi.

Tuttavia, CreateDIBSection può prendere un HANDLE ad una mappatura del file (creato con CreateFileMapping ). Se la struttura interna delle funzioni di funzione e le relative hBitmap sono abbastanza intelligente, può essere possibile per evitare di esaurire lo spazio indirizzo sfruttando questa capacità. Se sono "intelligenti" useranno MapViewOfFile per mappare relativamente piccole "finestre" del file, se necessario nello spazio degli indirizzi del processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top