Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

BlendModeCompat

class BlendModeCompat
kotlin.Any
   ↳ kotlin.Enum<androidx.core.graphics.BlendModeCompat>
   ↳ androidx.core.graphics.BlendModeCompat

Compat version of android.graphics.BlendMode, usages of BlendModeCompat will map to android.graphics.PorterDuff.Mode wherever possible

Summary

Enum values

Destination pixels covered by the source are cleared to 0.

Replaces hue and saturation of destination with hue and saturation of source, leaving luminosity unchanged.

Makes destination darker to reflect source.

Makes destination brighter to reflect source.

Retains the smallest component of the source and destination pixels.

Subtracts darker from lighter with higher contrast.

The source pixels are discarded, leaving the destination intact.

Discards the destination pixels that are not covered by source pixels.

Keeps the destination pixels that cover source pixels, discards the remaining source and destination pixels.

Keeps the destination pixels that are not covered by source pixels.

The source pixels are drawn behind the destination pixels.

Subtracts darker from lighter with lower contrast.

Makes destination lighter or darker, depending on source.

Replaces hue of destination with hue of source, leaving saturation and luminosity unchanged.

Retains the largest component of the source and destination pixel.

Replaces luminosity of destination with luminosity of source, leaving hue and saturation unchanged.

Multiplies the source and destination pixels.

Multiplies the source and destination pixels.

Multiplies or screens the source and destination depending on the destination color.

Adds the source pixels to the destination pixels and saturates the result.

Replaces saturation of destination saturation hue of source, leaving hue and luminosity unchanged.

Adds the source and destination pixels, then subtracts the source pixels multiplied by the destination.

Makes destination lighter or darker, depending on source.

The source pixels replace the destination pixels.

Discards the source pixels that do not cover destination pixels.

Keeps the source pixels that cover the destination pixels, discards the remaining source and destination pixels.

Keeps the source pixels that do not cover destination pixels.

The source pixels are drawn over the destination pixels.

Discards the source and destination pixels where source pixels cover destination pixels.

Enum values

CLEAR

enum val CLEAR : BlendModeCompat

Destination pixels covered by the source are cleared to 0.

\(\alpha_{out} = 0\)

\(C_{out} = 0\)

COLOR

enum val COLOR : BlendModeCompat

Replaces hue and saturation of destination with hue and saturation of source, leaving luminosity unchanged.

COLOR_BURN

enum val COLOR_BURN : BlendModeCompat

Makes destination darker to reflect source.

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\begin{equation} C_{out} = \begin{cases} C_{dst} + C_{src}*(1 - \alpha_{dst}) & C_{dst} = \alpha_{dst} \\ \alpha_{dst}*(1 - \alpha_{src}) & C_{src} = 0 \\ \alpha_{src}*(\alpha_{dst} - min(\alpha_{dst}, (\alpha_{dst} - C_{dst})*\alpha_{src}/C_{src})) + C_{src} * (1 - \alpha_{dst}) + \alpha_{dst}*(1-\alpha_{src}) & otherwise \end{cases} \end{equation}

COLOR_DODGE

enum val COLOR_DODGE : BlendModeCompat

Makes destination brighter to reflect source. \(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\begin{equation} C_{out} = \begin{cases} C_{src} * (1 - \alpha_{dst}) & C_{dst} = 0 \\ C_{src} + \alpha_{dst}*(1 - \alpha_{src}) & C_{src} = \alpha_{src} \\ \alpha_{src} * min(\alpha_{dst}, C_{dst} * \alpha_{src}/(\alpha_{src} - C_{src})) + C_{src} *(1 - \alpha_{dst} + \alpha_{dst}*(1 - \alpha_{src}) & otherwise \end{cases} \end{equation}

DARKEN

enum val DARKEN : BlendModeCompat

Retains the smallest component of the source and destination pixels.

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + min(C_{src}, C_{dst})\)

DIFFERENCE

enum val DIFFERENCE : BlendModeCompat

Subtracts darker from lighter with higher contrast.

\begin{equation} \alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst} \end{equation}

\begin{equation} C_{out} = C_{src} + C_{dst} - 2 * min(C_{src} * \alpha_{dst}, C_{dst} * \alpha_{src}) \end{equation}

DST

enum val DST : BlendModeCompat

The source pixels are discarded, leaving the destination intact.

\(\alpha_{out} = \alpha_{dst}\)

\(C_{out} = C_{dst}\)

DST_ATOP

enum val DST_ATOP : BlendModeCompat

Discards the destination pixels that are not covered by source pixels. Draws remaining destination pixels over source pixels.

\(\alpha_{out} = \alpha_{src}\)

\(C_{out} = \alpha_{src} * C_{dst} + (1 - \alpha_{dst}) * C_{src}\)

DST_IN

enum val DST_IN : BlendModeCompat

Keeps the destination pixels that cover source pixels, discards the remaining source and destination pixels.

\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)

\(C_{out} = C_{dst} * \alpha_{src}\)

DST_OUT

enum val DST_OUT : BlendModeCompat

Keeps the destination pixels that are not covered by source pixels. Discards destination pixels that are covered by source pixels. Discards all source pixels.

\(\alpha_{out} = (1 - \alpha_{src}) * \alpha_{dst}\)

\(C_{out} = (1 - \alpha_{src}) * C_{dst}\)

DST_OVER

enum val DST_OVER : BlendModeCompat

The source pixels are drawn behind the destination pixels.

\(\alpha_{out} = \alpha_{dst} + (1 - \alpha_{dst}) * \alpha_{src}\)

\(C_{out} = C_{dst} + (1 - \alpha_{dst}) * C_{src}\)

EXCLUSION

enum val EXCLUSION : BlendModeCompat

Subtracts darker from lighter with lower contrast.

\begin{equation} \alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst} \end{equation}

\begin{equation} C_{out} = C_{src} + C_{dst} - 2 * C_{src} * C_{dst} \end{equation}

HARD_LIGHT

enum val HARD_LIGHT : BlendModeCompat

Makes destination lighter or darker, depending on source.

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\begin{equation} C_{out} = \begin{cases} 2*C_{src}*C_{dst} & C_{src}*(1-\alpha_{dst}) + C_{dst}*(1-\alpha_{src}) + 2*C_{src} \leq \alpha_{src} \\ \alpha_{src}*\alpha_{dst}- 2*(\alpha_{dst} - C_{dst})*(\alpha_{src} - C_{src}) & otherwise \end{cases} \end{equation}

HUE

enum val HUE : BlendModeCompat

Replaces hue of destination with hue of source, leaving saturation and luminosity unchanged.

LIGHTEN

enum val LIGHTEN : BlendModeCompat

Retains the largest component of the source and destination pixel.

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + max(C_{src}, C_{dst})\)

LUMINOSITY

enum val LUMINOSITY : BlendModeCompat

Replaces luminosity of destination with luminosity of source, leaving hue and saturation unchanged.

MODULATE

enum val MODULATE : BlendModeCompat

Multiplies the source and destination pixels.

\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)

\(C_{out} = C_{src} * C_{dst}\)

MULTIPLY

enum val MULTIPLY : BlendModeCompat

Multiplies the source and destination pixels.

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\(C_{out} = C_{src} * (1 - \alpha_{dst}) + C_{dst} * (1 - \alpha_{src}) + (C_{src} * C_{dst})\)

OVERLAY

enum val OVERLAY : BlendModeCompat

Multiplies or screens the source and destination depending on the destination color.

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\(\begin{equation} C_{out} = \begin{cases} 2 * C_{src} * C_{dst} & 2 * C_{dst} \lt \alpha_{dst} \\ \alpha_{src} * \alpha_{dst} - 2 (\alpha_{dst} - C_{src}) (\alpha_{src} - C_{dst}) & otherwise \end{cases} \end{equation}\)

PLUS

enum val PLUS : BlendModeCompat

Adds the source pixels to the destination pixels and saturates the result.

\(\alpha_{out} = max(0, min(\alpha_{src} + \alpha_{dst}, 1))\)

\(C_{out} = max(0, min(C_{src} + C_{dst}, 1))\)

SATURATION

enum val SATURATION : BlendModeCompat

Replaces saturation of destination saturation hue of source, leaving hue and luminosity unchanged.

SCREEN

enum val SCREEN : BlendModeCompat

Adds the source and destination pixels, then subtracts the source pixels multiplied by the destination.

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

\(C_{out} = C_{src} + C_{dst} - C_{src} * C_{dst}\)

SOFT_LIGHT

enum val SOFT_LIGHT : BlendModeCompat

Makes destination lighter or darker, depending on source.

Where \begin{equation} m = \begin{cases} C_{dst} / \alpha_{dst} & \alpha_{dst} \gt 0 \\ 0 & otherwise \end{cases} \end{equation}

\begin{equation} g = \begin{cases} (16 * m * m + 4 * m) * (m - 1) + 7 * m & 4 * C_{dst} \leq \alpha_{dst} \\ \sqrt m - m & otherwise \end{cases} \end{equation}

\begin{equation} f = \begin{cases} C_{dst} * (\alpha_{src} + (2 * C_{src} - \alpha_{src}) * (1 - m)) & 2 * C_{src} \leq \alpha_{src} \\ C_{dst} * \alpha_{src} + \alpha_{dst} * (2 * C_{src} - \alpha_{src}) * g & otherwise \end{cases} \end{equation}

\begin{equation} \alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst} \end{equation} \begin{equation} C_{out} = C_{src} / \alpha_{dst} + C_{dst} / \alpha_{src} + f \end{equation}

SRC

enum val SRC : BlendModeCompat

The source pixels replace the destination pixels.

\(\alpha_{out} = \alpha_{src}\)

\(C_{out} = C_{src}\)

SRC_ATOP

enum val SRC_ATOP : BlendModeCompat

Discards the source pixels that do not cover destination pixels. Draws remaining source pixels over destination pixels.

\(\alpha_{out} = \alpha_{dst}\)

\(C_{out} = \alpha_{dst} * C_{src} + (1 - \alpha_{src}) * C_{dst}\)

SRC_IN

enum val SRC_IN : BlendModeCompat

Keeps the source pixels that cover the destination pixels, discards the remaining source and destination pixels.

\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)

\(C_{out} = C_{src} * \alpha_{dst}\)

SRC_OUT

enum val SRC_OUT : BlendModeCompat

Keeps the source pixels that do not cover destination pixels. Discards source pixels that cover destination pixels. Discards all destination pixels.

\(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src}\)

\(C_{out} = (1 - \alpha_{dst}) * C_{src}\)

SRC_OVER

enum val SRC_OVER : BlendModeCompat

The source pixels are drawn over the destination pixels.

\(\alpha_{out} = \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)

\(C_{out} = C_{src} + (1 - \alpha_{src}) * C_{dst}\)

XOR

enum val XOR : BlendModeCompat

Discards the source and destination pixels where source pixels cover destination pixels. Draws remaining source pixels.

\(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)

\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst}\)