Цвета и альфа-прозрачность
Понимание того, как Skija работает с цветами и прозрачностью, необходимо для достижения правильных визуальных результатов, особенно при смешивании нескольких слоёв или изображений.
Представление цвета
В Skija цвета чаще всего представляются в виде 32-битных целых чисел в формате ARGB.
- A (Альфа): биты 24-31
- R (Красный): биты 16-23
- G (Зелёный): биты 8-15
- B (Синий): биты 0-7
Вы можете использовать служебный класс Color для безопасного управления этими значениями:
int myColor = Color.makeARGB(255, 66, 133, 244); // Непрозрачный синий
int transparentRed = Color.withA(0xFFFF0000, 128); // Красный с 50% прозрачностьюТип альфа-канала: с предварительным умножением и прямой
Одной из самых важных концепций в Skia является Тип альфа-канала (ColorAlphaType).
С предварительным умножением (PREMUL)
Это формат по умолчанию и рекомендуемый для рендеринга. В этом формате компоненты RGB уже умножены на значение альфа-канала.
- Зачем? Это делает смешивание намного быстрее и предотвращает появление "тёмных краёв" при фильтрации или масштабировании изображений.
- Пример: Белый цвет с 50% прозрачностью (Alpha=128, R=255, G=255, B=255) становится (128, 128, 128, 128) в пространстве с предварительным умножением.
Без предварительного умножения (UNPREMUL)
Также известен как "Прямой альфа-канал". Компоненты RGB не зависят от альфа-канала. Именно так большинство файлов изображений (например, PNG) хранят данные.
- Пример: Тот же белый цвет с 50% прозрачностью остаётся (128, 255, 255, 255).
Цветовые пространства
Skija учитывает цветовые пространства. Хотя вы можете работать с "наивным" RGB, для профессиональных результатов следует указывать ColorSpace.
ColorSpace.getSRGB(): Стандартное цветовое пространство для веба и большинства мониторов.ColorSpace.getDisplayP3(): Для дисплеев с широким цветовым охватом (например, современных Mac и iPhone).
При создании Surface или загрузке Image всегда учитывайте цветовое пространство, чтобы обеспечить единообразный внешний вид на разных устройствах.
Рекомендации
- Всегда используйте альфа-канал с предварительным умножением для активного рендеринга и композиции.
- Используйте
Color4f, когда вам нужны цвета с высокой точностью (с плавающей запятой) или вы работаете с цветовыми пространствами с широким охватом. - Будьте внимательны к режиму альфа-канала при создании снимков или чтении пикселей; вам может потребоваться преобразовать из
PREMULвUNPREMUL, если вы планируете сохранить данные в стандартный PNG.