Графический интерфейс GDI в Microsoft Windows (2)
5b239685

Не меняется, т. е. перо



Таблица 7



Режим рисованияФормула Цвет пиксела
R2_COPYPEN PСоответствует (равен) цвету пера
R2_BLACK 0Черный
R2_WHITE 1Белый
R2_NOP D Не меняется, т. е. перо ничего не рисует
R2_NOT ~DПолучается инвертированием цвета подложки, т. е. цвета пиксела до рисования
R2_NOTCOPYPEN ~PПолучается инвертированием цвета пера
R2_MASKPEN P&DКомбинация компонент цветов, имеющихся как в цвете подложки, так и в цвете пера
R2_NOTMASKPEN ~(P&D) Инверсия предыдущего значения
R2_MERGEPEN P|DКомбинация компонент цветов подложки и пера
R2_NOTMERGEPEN ~(P|D) Инверсия предыдущего значения
R2_XORPEN P^DПри определении цвета пиксела выполняется операция "ИСКЛЮЧАЮЩЕЕ ИЛИ" между компонентами цвета подложки и пера
R2_NOTXORPEN ~(P^D)Инверсия предыдущего значения
R2_MASKNOTPEN ~P & D Комбинация цвета подложки и инверсии цвета пера
R2_MASKPENNOT P & ~D Комбинация двух цветов: инверсии цвета подложки и цвета пера
R2_MERGENOTPEN ~P | D Комбинация компонент цветов подложки и инверсии цвета пера
R2_MERGEPENNOT P | ~D Комбинация инверсии цвета подложки и цвета пера
Если изображение и перо черно-белые, результат выполнения описанных выше операций (которые, кстати, называются растровыми операциями ) можно легко предсказать.
В режиме R2_COPYPEN, который установлен в контексте отображения по умолчанию, цвет нарисованной линии будет такой же, как и цвет пера. Для режимов R2_BLACK и R2_WHITE цвет линии будет, соответственно, черный и белый. В режиме R2_NOP вы не увидите нарисованную линию, так как цвет вдоль нее вообще не изменится. Более интересен режим R2_NOT, при использовании которого на черном фоне будет нарисована белая линия, а на белом фоне - черная.
Для цветных изображений перечисленные выше формулы применяются по отдельности к каждой компоненте цвета (всего в Windows используется три компоненты цвета - красная, зеленая и голубая), поэтому для некоторых режимов рисования цвет линии предсказать достаточно трудно. Использование цветовых палитр, которые мы рассмотрим в третьей главе нашей книги, дополнительно усложняет эту задачу.
С помощью функции GetROP2 приложение может определить режим рисования, установленный для контекста отображения hdc: int WINAPI GetROP2(HDC hdc);


Таблица 7

ПолеКритерии проверки
biPlanesДолжно содержать значение 1
biBitCount Может быть равно 1, 4, 8 или 24.Вы можете столкнуться с новыми 16- и 32-битовыми форматами файлов DIB, используемых в Windows NT. Для них в этом поле могут находиться также значения 16 и 32. Если ваше приложение не умеет обрабатывать такие файлы, данную ситуацию следует рассматривать как ошибочную
biCompressionМожет принимать одно из следующих значений: BI_RGB, BI_RLE4, BI_RLE8.При использовании метода компрессии BI_RLE4 содержимое поля biBitCount должно быть равно 4. При использовании метода компрессии BI_RLE8 содержимое поля biBitCount должно быть равно 8.Ваше приложение может ограничиться обработкой bmp-файлов в формате BI_RGB, как это делает, например, приложение Paintbrush
Можно было бы проверить содержимое и других полей структуры BITMAPINFOHEADER, однако это необязательно, так как они не содержат критической информации. Проверка "с пристрастием" может привести к тому, что пользователи будут думать, будто ваше приложение не умеет читать такие файлы, с которыми легко справляются другие приложения.
Итак, подводя итоги, можно выдать следующие рекомендации:
смело игнорируйте bmp-файлы в формате Presentation Manager, а если вы не можете так поступить, преобразуйте их в формат Windows;
в структуре BITMAPINFOHEADER проверяйте только поля biPlanes, biBitCount и biCompression;
так как метод компрессии RLE4 и RLE8 используются редко и не приводит к значительной экономии памяти, ваше приложение может не поддерживать компрессованные bmp-файлы.



Таблица 7

КонстантаОписание
DEFAULT_QUALITY Качество не имеет значения
DRAFT_QUALITY Низкое качество. Допустимо масштабирование шрифтов, синтезирование наклонных, жирных, перечеркнутых и подчеркнутых символов
PROOF_QUALITY Высокое качество. Масштабирование шрифтов не допускается. При этом могут быть получены символы, имеющие размер, немного меньший запрошенного


Содержание раздела