Вопрос

У меня проблема с памятью с алгоритмом, который я использую, чтобы «сгладить» страницу в 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

Проблема в том, что у меня действительно большая растровая карта, и в некоторых случаях я не могу держать HBITMAP в памяти, пока я выделяю DIB, чтобы быть скопированным.

Так что это длинный выстрел, но могу ли я каким -то образом выделить раздел DIB на диске и при этом иметь для него HBITMAP? (Используйте ту же ручку для моей функции ConvertbitMap)

Это было полезно?

Решение

Что такое режим сбоя? Вы говорите «Физическая память»: Windows использует виртуальную память, она будет страдать для диска, вам не нужно беспокоиться о том, чтобы исчерпывать физическую память помимо удара производительности. Если у вас заканчивается адресное пространство, использование диска может не помочь вам.

Однако, CreateDIBSection может взять HANDLE в картирование файлов (создано с CreateFileMapping ) Если внутренние функции и связанные с ними функции HBITMAP достаточно умны, возможно, можно избежать исчерпания вашего адресного пространства, используя эту возможность. Если они "умны", они будут использовать MapViewOfFile Чтобы отобразить относительно небольшие «окна» файла по мере необходимости в адресном пространстве вашего процесса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top