Frage

Ich habe ein Speicherproblem mit einem Algorithmus I „Flatten“ bin mit einer Seite in einem PDF-Dokument.

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

Das Problem ist, ich habe eine wirklich große Bitmap und in einigen Fällen kann ich nicht die HBitmap in Erinnerung behalten, während ich die DIB zuteilen zu kopieren.

So ist es weit hergeholt, aber ich kann irgendwie die DIB-Abschnitt auf der Festplatte zuzuweisen und noch ein HBITMAP für sie haben? (Verwenden Sie den gleichen Handgriff für meine ConvertBitmap Funktion)

War es hilfreich?

Lösung

Was ist der Fehlermodus? Sie sagen: „physischen Speicher“: Windows verwendet den virtuellen Speicher, wird es Seite auf die Festplatte, die Sie nicht über das Ausführen des physischen Speichers über die Performance-Einbußen zu kümmern. Wenn Sie Adressraum zur Neige, die Festplatte mit nicht in der Lage sein, Ihnen zu helfen.

Allerdings CreateDIBSection können nehmen ein HANDLE auf eine Dateizuordnung (erstellt mit CreateFileMapping ). Wenn die Einbauten der Funktion und die damit verbundene HBITMAP Funktionen intelligent genug sind, kann es möglich sein, Ihren Adressraum zu vermeiden anstrengend durch diese Fähigkeit nutzen. Wenn sie "smart" sind, werden sie benutzen MapViewOfFile relativ kleine „Fenster“ der Datei abzubilden als Prozess-Adressraum benötigt in.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top