Skip to content

Цвета и альфа-прозрачность

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

Представление цвета

В Skija цвета чаще всего представляются в виде 32-битных целых чисел в формате ARGB.

  • A (Альфа): биты 24-31
  • R (Красный): биты 16-23
  • G (Зелёный): биты 8-15
  • B (Синий): биты 0-7

Вы можете использовать служебный класс Color для безопасного управления этими значениями:

java
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 всегда учитывайте цветовое пространство, чтобы обеспечить единообразный внешний вид на разных устройствах.

Рекомендации

  1. Всегда используйте альфа-канал с предварительным умножением для активного рендеринга и композиции.
  2. Используйте Color4f, когда вам нужны цвета с высокой точностью (с плавающей запятой) или вы работаете с цветовыми пространствами с широким охватом.
  3. Будьте внимательны к режиму альфа-канала при создании снимков или чтении пикселей; вам может потребоваться преобразовать из PREMUL в UNPREMUL, если вы планируете сохранить данные в стандартный PNG.