Какой размер растрового изображения недоступен для создания? Ограничение, которое вы, вероятно, достигнете, - это виртуальное адресное пространство, которое для 32-битного кода составляет 2 ГБ, 3 ГБ или 4 ГБ - в зависимости от среды. Самое простое решение - перейти на 64-битный код.
Чтобы представить это изображение, вы, возможно, захотите реализовать собственное окно / элемент управления, который перетаскивает часть исходного изображения в клиентскую область и будет управлять полосами прокрутки, чтобы позволить пользователю перемещаться по изображению. Маловероятно, что есть какая-то специфика в реализации такого окна по сравнению с окнами с поддержкой прокрутки, которые разрабатываются годами. Функции полосы прокрутки Получите это.
Обновление CreateFileMapping
/ MapViewOfFile
:
Память, которую вы выделяете с помощью CreateFileMapping
, не сразу отображается в адресное пространство процесса, и это дает вам возможность выделить больше, чем вы можете отобразить. Обратите внимание, что Windows фактически не резервирует реальные страницы при выполнении запроса на выделение, система только проверяет, возможно ли такое размещение, и будет эффективно распределять по требованию позже.
Вы можете использовать этот простой инструмент зондирования FileMappingVirtualAddress.exe , чтобы увидеть, как все это работает, и оценить, сколько вы можете выделить в своем приложении. Утилита делает столько блоков CreateFileMapping
256 МБ при запуске, сколько стоит, и, установив флажок вручную, вы делаете MapViewOfFile
для уже существующего сопоставления файлов. Вы сможете увидеть, что реальным ограничением является виртуальное адресное пространство (2, 3 или 4 ГБ в зависимости от среды), но это не значит, что вы не можете выделить больше.
Также обратите внимание, что если вы запрашиваете MapViewOfFile
для большого блока, системы должны удовлетворить это с помощью непрерывного адресного блока, поэтому это адресное пространство должно быть доступно, и фрагментация пространства может стать проблемой.
С большим растровым изображением вы можете сделать так, чтобы вам не требовалось полное растровое изображение все время, и вы можете обрабатывать плитку изображения по плитке.
Вы также можете обрезать ссылку на скачивание и просмотреть Trac для 64-битной и 32-битной версии без / LARGEADDRESSAWARE , чтобы увидеть, как они отличаются в действии.