Не меняется, т. е. перо
Таблица 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 | Высокое качество. Масштабирование шрифтов не допускается. При этом могут быть получены символы, имеющие размер, немного меньший запрошенного |
Содержание раздела