Поделиться через


Контексты устройства памяти

Чтобы приложения могли размещать выходные данные в памяти, а не отправлять их на фактическое устройство, используйте специальный контекст устройства для операций растрового изображения, называемых контекстом устройства памяти. Контроллер домена памяти позволяет системе обрабатывать часть памяти как виртуальное устройство. Это массив битов в памяти, который приложение может временно использовать для хранения данных цвета для растровых изображений, созданных на обычной поверхности рисования. Так как растровое изображение совместимо с устройством, контроллер памяти также иногда называется совместимым контекстом устройства.

Контроллер домена памяти хранит растровые изображения для определенного устройства. Приложение может создать контроллер памяти, вызвав функцию CreateCompatibleDC.

Исходное растровое изображение в контроллере домена памяти — это просто заполнитель. Его размеры составляют один пиксель на один пиксель. Перед началом рисования приложение должно выбрать растровое изображение с соответствующей шириной и высотой в контроллере домена, вызвав функцию SelectObject. Чтобы создать растровое изображение соответствующих измерений, используйте функцию CreateBitmap , CreateBitmapIndirectили CreateCompatibleBitmap. После выбора растрового изображения в контроллере домена памяти система заменяет однобитовый массив достаточно большим массивом, чтобы сохранить сведения о цвете для указанного прямоугольника пикселей.

Когда приложение передает дескриптор, возвращаемый CreateCompatibleDC одной из функций рисования, запрошенные выходные данные не отображаются на поверхности рисования устройства. Вместо этого система сохраняет сведения о цвете для результирующей линии, кривой, текста или области в массиве битов. Приложение может скопировать изображение, хранящееся в памяти обратно в область рисования, вызвав функцию BitBlt, определив контроллер памяти как контекст исходного устройства и окно или экран контроллера домена в качестве контекста целевого устройства.

При отображении DIB или DDB, созданного из DIB на устройстве палитры, можно повысить скорость рисования изображения, упорядочив логическую палитру для сопоставления макета системной палитры. Для этого вызовите GetDeviceCaps со значением NUMRESERVED, чтобы получить количество зарезервированных цветов в системе. Затем вызовите GetSystemPaletteEntries и заполните первые и последние записи NUMRESERVED/2 логической палитры соответствующими цветами системы. Например, если число NUMRESERVED равно 20, вы заполните первые и последние 10 записей логической палитры с помощью системных цветов. Затем заполните оставшиеся цвета 256-NUMRESERVED логической палитры (в нашем примере остальные 236 цвета) цветами из DIB и задайте флаг PC_NOCOLLAPSE для каждого из этих цветов.

Дополнительные сведения о цветах и палитрах см. в разделе Цвета. Дополнительные сведения о растровых изображениях и операциях с растровыми изображениями см. в растровых карт.