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


Чтобы дать возможность прикладным программам помещать вывод данных в память, а не отправлять их на реальное устройство (диск), используется специальный контекст устройства  для операций с точечным рисунком, называемый контекст устройства в памяти (memory device context). Контекст устройства (DC) в памяти дает возможность системе рассматривать часть памяти как виртуальное устройство. Это - массив битов в памяти, который приложение временно может использовать, чтобы сохранить данные о цвете для точечных рисунков, созданных на обычной поверхности для рисования . Поскольку точечный рисунок совместим с устройством, контекст устройства (DC) в памяти также иногда относится к совместимому контексту устройства (compatible device context).

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

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

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

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

Для получения дополнительной информации о цвете и палитрах, см. главу Цвета. Для получения дополнительной информации о точечных рисунках и операциях с точечным рисунком, см. главу Точечные рисунки.

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz