Skip to content

Справочник API: Цвет и кодирование

На этой странице рассматривается представление цветов с высокой точностью, форматы пикселей, интерпретация альфа-канала и цветовые пространства.


Color4f

Color4f представляет цвет с использованием четырёх значений с плавающей запятой (RGBA), каждое из которых обычно находится в диапазоне от 0.0 до 1.0. Это обеспечивает гораздо более высокую точность по сравнению с традиционными 8-битными целыми числами.

Конструкторы

  • new Color4f(r, g, b, a)
  • new Color4f(r, g, b): Непрозрачный цвет (альфа = 1.0).
  • new Color4f(int color): Преобразует стандартное целое число ARGB 8888 в компоненты с плавающей запятой.

Методы

  • toColor(): Преобразует обратно в целое число ARGB 8888.
  • makeLerp(other, weight): Линейно интерполирует между двумя цветами.

Пример

java
Color4f red = new Color4f(1f, 0f, 0f, 1f);
Color4f halfTransparentBlue = new Color4f(0f, 0f, 1f, 0.5f);

// Использование в Paint
Paint paint = new Paint().setColor4f(red, ColorSpace.getSRGB());

ColorType

ColorType описывает, как биты организованы в пикселе (например, порядок каналов и глубина цвета).

Распространённые типы

  • RGBA_8888: 8 бит на канал, красный канал первый.
  • BGRA_8888: 8 бит на канал, синий канал первый (распространено в Windows).
  • N32: Собственный 32-битный формат для текущей платформы (обычно соответствует RGBA или BGRA).
  • F16: 16-битный половинной точности (half-float) на канал (High Dynamic Range).
  • GRAY_8: один 8-битный канал для оттенков серого.
  • ALPHA_8: один 8-битный канал для масок прозрачности.

ColorAlphaType

ColorAlphaType описывает, как следует интерпретировать альфа-канал.

  • OPAQUE: Все пиксели полностью непрозрачны; альфа-канал игнорируется.
  • PREMUL: Компоненты цвета умножены на альфа (стандарт для производительности Skia).
  • UNPREMUL: Компоненты цвета не зависят от альфа-канала.

ColorSpace

ColorSpace определяет диапазон (охват) и линейность цветов.

Распространённые цветовые пространства

  • ColorSpace.getSRGB(): Стандартное цветовое пространство для веба и большинства мониторов.
  • ColorSpace.getSRGBLinear(): sRGB с линейной передаточной функцией (полезно для вычислений/смешивания).
  • ColorSpace.getDisplayP3(): Широкий цветовой охват, используемый современными устройствами Apple.

Методы

  • isSRGB(): Возвращает true, если пространство является sRGB.
  • isGammaLinear(): Возвращает true, если передаточная функция линейна.
  • convert(to, color): Преобразует Color4f из этого пространства в другое.

Пример использования

java
// Создание ImageInfo с определённым кодированием
ImageInfo info = new ImageInfo(
    800, 600, 
    ColorType.N32, 
    ColorAlphaType.PREMUL, 
    ColorSpace.getSRGB()
);