¿Qué significa PorterDuff.Mode en los gráficos de Android? ¿Qué hace?

142

Me gustaría saber qué significa PorterDuff.Mode en los gráficos de Android.

Sé que es un modo de transferencia .

También sé que tiene atributos como DST_IN, Multiplicar, etc.

Rogerstone
fuente
de mi reciente descubrimiento. Si tiene imágenes superpuestas e intenta cambiar el filtro de color de una de ellas, ¡afecta a la otra imagen que se superpone!
Jonathan

Respuestas:

321

Aquí hay un excelente artículo con ilustraciones de un ingeniero de Google:

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

PorterDuff se describe como una forma de combinar imágenes como si fueran "piezas de cartón de forma irregular" superpuestas entre sí, así como un esquema para mezclar las partes superpuestas.

La forma predeterminada de Android para componer imágenes es PorterDuff.Mode.SRC_OVER , que equivale a dibujar la imagen / color de origen sobre la imagen de destino. En otras palabras, hace lo que cabría esperar y dibuja la imagen de origen (la que está dibujando) encima de la imagen de destino (el lienzo) con la imagen de destino que se muestra hasta el grado definido por el alfa de la imagen de origen.

PorterDuff infografía del artículo

Puede usar la siguiente clave para comprender el álgebra que usan los documentos de Android para describir los otros modos (consulte el artículo para obtener una descripción más completa con términos similares).

  • Sa Source alpha
  • Sc Fuente de color
  • Da Destination alpha
  • Dc Color de destino

Donde alfa es un valor [0..1], y el color se sustituye una vez por canal (así que use la fórmula una vez para cada uno de rojo, verde y azul)

Los valores resultantes se especifican como un par de llaves cuadradas de la siguiente manera.

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

Donde alpha-valuey color-valueson fórmulas para generar el canal alfa resultante y cada canal de color respectivamente.

Fásico
fuente