Поделиться через


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

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

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

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

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

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

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

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

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