Окт 16

Полутоновая палитра

тобы увеличить количество имеющихся цветов в палитре, можно воспользоваться полутоновой палитрой. Для этого необходимо выполнить следующие шаги:
1. Создать полутоновую палитру (функция CreateHalftonePalette).
2. Выбрать созданную палитру в контекст устройства (функция SelectPalette).
3. Реализовать палитру при помощи функции RealizePalette. Функция SelectPalette имеет следующий прототип:
HPALETTE SelectPaletteC
HDC hdc. // дескриптор контекста устройства
HPALETTE hpal. // дескриптор логической палитры
BOOL bForceBackground // режим (фоновый или основной) ):
Последний параметр функции определяет, в каком режиме — фоновом (TRUE) или основном (FALSE) — будет реализована палитра при вызове функции Realize Palette. Процесс реализации палитры в общих чертах был описан выше.
Следует уточнить, что в фоновом режиме функция RealizePalette пытается разместить логическую палитру привязкой к уже существующим цветам в системной палитре, подыскивая ближайшее соответствие. Это размещение делается всегда, независимо от того, активно ли данное приложение.
В основном режиме функция RealizePalette копирует логическую палитру в системную, за исключеним статических цветов, только тогда, когда приложение активно.
Логическая палитра hPal создается в блоке обработки сообщения WM_CREATE, а реализуется как в блоке обработки сообщения WM_QUERYNEWPALETTE, так и в блоке обработки сообщения WM_PALETTECHAN6ED. Функция Realize Palette возвращает количество цветов логической палитры, отображенных на системную палитру. Если это значение больше нуля, то вызывается функция InvalidateRect.
В блоке обработки сообщения WM_PAINT логическая палитра выбирается в контекст устройства, после чего вызываются функции рисования.
После запуска этой программы в 256-цветном режиме экрана вы должны увидеть картинку, практически совпадающую по качеству передачи цветов с той, которая была в режиме экрана True Color .