Что PorterDuff.Mode означает в андроид графике. Что это делает?

142

Я хотел бы знать, что PorterDuff.Mode означает в графике Android.

Я знаю, что это режим передачи .

Я также знаю, что у него есть такие атрибуты, как DST_IN, Multiply и т. Д.

rogerstone
источник
из моего недавнего открытия. Если у вас есть перекрывающиеся изображения и вы пытаетесь изменить цветовой фильтр одного из них, это влияет на другое изображение, которое перекрывает его!
Джонатан

Ответы:

321

Вот отличная статья с иллюстрациями инженера Google:

http://ssp.impulsetrain.com/porterduff.html

PorterDuff описывается как способ объединения изображений, как если бы они были «кусочками картона неправильной формы», наложенными друг на друга, а также как схема смешивания перекрывающихся частей.

Способ создания изображений по умолчанию для Android - это PorterDuff.Mode.SRC_OVER , который соответствует рисованию исходного изображения / цвета поверх целевого изображения. Другими словами, он делает то, что вы ожидаете, и рисует исходное изображение (изображение, которое вы рисуете) поверх конечного изображения (холста), причем конечное изображение отображается до степени, определенной альфа-каналом исходного изображения.

PorterDuff инфографики из статьи

Вы можете использовать ключ ниже, чтобы понять алгебру, которую используют документы Android для описания других режимов ( более полное описание с похожими терминами см. В статье ).

  • Sa Source альфа
  • Sc Исходный цвет
  • Da Destination alpha
  • Цвет назначения Dc

Где альфа является значением [0..1], а цвет заменяется один раз на канал (поэтому используйте формулу один раз для каждого из красного, зеленого и синего)

Полученные значения указываются в виде пары в квадратных скобках следующим образом.

[<alpha-value>,<color-value>]

Где alpha-valueи color-value- формулы для генерации результирующего альфа-канала и каждого цветового канала соответственно.

Phasmal
источник