Question

J'ai un problème de mémoire avec un algorithme que je utilise pour « Aplatir » une page dans un document 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

Le problème est que j'ai un bitmap vraiment grand et dans certains cas, je ne peux pas garder le HBitmap en mémoire pendant que je le DIB à allouer être copiés.

Il est donc un long shot, mais puis-je attribuer en quelque sorte la section de DIB sur le disque et ont encore un HBITMAP pour elle? (Utiliser la même poignée pour ma fonction ConvertBitmap)

Était-ce utile?

La solution

Quel est le mode d'échec? Vous dites « mémoire physique »: Windows utilise la mémoire virtuelle, il la page sur le disque, vous n'avez pas à vous soucier de manquer de mémoire physique au-delà du succès de la performance. Si vous êtes à court d'espace d'adressage, en utilisant le disque peut ne pas être en mesure de vous aider.

Cependant, CreateDIBSection peut prendre HANDLE à un mappage de fichier (créé avec CreateFileMapping ). Si les éléments internes de la fonction et les fonctions connexes HBITMAP sont assez intelligents, il peut être possible d'éviter épuiser votre espace d'adressage en tirant parti de cette capacité. Si elles sont « intelligents », ils utiliseront MapViewOfFile à la carte « fenêtres » relativement faible du fichier au besoin dans l'espace d'adressage de votre processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top