Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

4.10.10 Преобразования цветов

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

Наилучший результат преобразования достигается в случае, если исходный битовый образ монохромный. Windows использует атрибуты цвета текста и фона приемного контекста устройства для преобразования:

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

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

Преобразование битового образа из цветного контекста устройства в монохромный приемный контекст устройства является менее удовлетворительным:

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

Здесь существует проблема, связанная с цветами: Windows необходимо сравнить конкретную комбинацию битов цвета битового образа (лежащих в разных цветовых плоскостях или в одной плоскости) с 24-битным значением цвета фона. Это значит, что цветной контекст устройства должен относиться к физическому устройству или быть контекстом памяти на базе реального устройства. Например, у вас имеется монохромный драйвер устройства. Вы строите контекст памяти на базе дисплейного контекста устройства и выбираете цветной битовый образ в контекст памяти, а затем делаете попытку перенести битовый образ в монохромный контекст устройства. Это не удается, потому что Windows не знает, как множество цветовых плоскостей или множество битов на пиксель битового образа контекста памяти соотносится с реальными цветами.

4.10.11 Преобразования режимов отображения

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

BitBlt(hdcDest, xDest, yDest, xWidth, yHeight, hdcSrc, xSrc, ySrc, dwROP);

Величины xWidth и yHeight задаются в логических единицах и относятся одновременно к прямоугольникам исходного и приемного контекста устройства. Функция BitBlt должна преобразовать все координаты и размеры в координаты устройства перед вызовом драйвера для выполнения операции. Поскольку значения xWidth и yHeight используются для обоих контекстов устройства, они должны преобразовываться в единицы устройства (пиксели) независимо для каждого контекста устройства.

Когда исходный и приемный контексты устройства равны или когда оба контекста устройства используют режим отображения MM_TEXT, размер этого прямоугольника в единицах устройства будет одинаковым для обоих контекстов устройства. Windows тогда может осуществить простой перенос пиксель-в-пиксель. Однако, когда размеры прямоугольника в единицах устройства различны в двух контекстах устройства, Windows перекладывает работу на более мощную функцию StretchBlt.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]