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

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

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

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

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

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

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