Логическая палитра


Логическая палитра (logical palette) - это цветовая палитра, которую приложение создает и связывает с данным контекстом устройства. Логические палитры позволяют приложениям определять и использовать цвета, которые соответствуют их специфическим потребностям. Приложения могут создать любое число логических палитр, используя их для отдельных контекстов устройства, или переключая между ними для отдельные контексты устройства. Максимальное число палитр, которое приложение может создать, зависит от ресурсов системы.

Приложение создает логическую палитру при помощи использования функции CreatePalette. Приложение заполняет структуру LOGPALETTE, которая определяет число записей и кодов цвета для каждой записи, а затем приложение передает структуру в функцию CreatePalette. Возвращенное значение функцией - дескриптор палитры, который приложение использует во всех последующих операциях, чтобы идентифицировать палитру. Чтобы использовать цвета в логической палитре, приложение выбирает палитру в контекст устройства при помощи использования функции SelectPalette, а затем реализует палитру при помощи использования функции RealizePalette. Цвета в палитре становятся доступными, как только логическая палитра реализуется.

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

Хотя приложение может определить любой код цвета для данной записи в логической палитре, не все цвета могут быть сгенерированы данным устройством. Система не дает способа узнать, какие цвета поддерживаются, но приложение может определить общее количество этих цветов, извлекая цветовую разрешающую способность устройства. Цветовая разрешающая способность, определенная  в битах цвета на пиксель, является равной значению COLORRES, возвращенному функцией GetDeviceCaps. Устройство, которое имеет цветную разрешающую способность 18, имеет 262 144 возможных цвета. Если прикладные программы запрашивают цвет, который не поддерживается, системой выбирается соответствующее приближение.

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

Приложение может изменить число записей в логической палитре, используя функцию ResizePalette. Если приложение уменьшает размер палитры, оставшиеся записи не изменяются. Если приложение расширяет размер палитры, система устанавливает цвет для каждой новой записи в черный (0, 0, 0), а флажок обнуляет.

Приложение может извлечь цвет и установить значения флажков для записей в данной логической палитре при помощи использования функция GetPaletteEntries. Приложение может извлечь индекс для записи в данной логической палитре, которая наиболее близко соответствует указанному коду цвета при помощи использования функции GetNearestPaletteIndex.

Когда приложению логическая палитра больше не нужна, оно может удалить ее используя функцию DeleteObject. Приложение должно удостовериться, что логическая палитра больше не выбирается в контекст устройства перед ее удалением.

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

Hosted by uCoz