589 lines
18 KiB
Java
589 lines
18 KiB
Java
![]() |
/*
|
||
|
* Copyright (C) 2018 The Android Open Source Project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package android.graphics;
|
||
|
|
||
|
import android.annotation.NonNull;
|
||
|
import android.annotation.Nullable;
|
||
|
|
||
|
public enum BlendMode {
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_CLEAR.png" />
|
||
|
* <figcaption>Destination pixels covered by the source are cleared to 0.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = 0\)</p>
|
||
|
* <p>\(C_{out} = 0\)</p>
|
||
|
*/
|
||
|
CLEAR(0),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SRC.png" />
|
||
|
* <figcaption>The source pixels replace the destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src}\)</p>
|
||
|
* <p>\(C_{out} = C_{src}\)</p>
|
||
|
*/
|
||
|
SRC(1),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DST.png" />
|
||
|
* <figcaption>The source pixels are discarded, leaving the destination intact.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = C_{dst}\)</p>
|
||
|
*/
|
||
|
DST(2),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SRC_OVER.png" />
|
||
|
* <figcaption>The source pixels are drawn over the destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = C_{src} + (1 - \alpha_{src}) * C_{dst}\)</p>
|
||
|
*/
|
||
|
SRC_OVER(3),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DST_OVER.png" />
|
||
|
* <figcaption>The source pixels are drawn behind the destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{dst} + (1 - \alpha_{dst}) * \alpha_{src}\)</p>
|
||
|
* <p>\(C_{out} = C_{dst} + (1 - \alpha_{dst}) * C_{src}\)</p>
|
||
|
*/
|
||
|
DST_OVER(4),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SRC_IN.png" />
|
||
|
* <figcaption>Keeps the source pixels that cover the destination pixels,
|
||
|
* discards the remaining source and destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = C_{src} * \alpha_{dst}\)</p>
|
||
|
*/
|
||
|
SRC_IN(5),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DST_IN.png" />
|
||
|
* <figcaption>Keeps the destination pixels that cover source pixels,
|
||
|
* discards the remaining source and destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = C_{dst} * \alpha_{src}\)</p>
|
||
|
*/
|
||
|
DST_IN(6),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SRC_OUT.png" />
|
||
|
* <figcaption>Keeps the source pixels that do not cover destination pixels.
|
||
|
* Discards source pixels that cover destination pixels. Discards all
|
||
|
* destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src}\)</p>
|
||
|
* <p>\(C_{out} = (1 - \alpha_{dst}) * C_{src}\)</p>
|
||
|
*/
|
||
|
SRC_OUT(7),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DST_OUT.png" />
|
||
|
* <figcaption>Keeps the destination pixels that are not covered by source pixels.
|
||
|
* Discards destination pixels that are covered by source pixels. Discards all
|
||
|
* source pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = (1 - \alpha_{src}) * \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = (1 - \alpha_{src}) * C_{dst}\)</p>
|
||
|
*/
|
||
|
DST_OUT(8),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SRC_ATOP.png" />
|
||
|
* <figcaption>Discards the source pixels that do not cover destination pixels.
|
||
|
* Draws remaining source pixels over destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = \alpha_{dst} * C_{src} + (1 - \alpha_{src}) * C_{dst}\)</p>
|
||
|
*/
|
||
|
SRC_ATOP(9),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DST_ATOP.png" />
|
||
|
* <figcaption>Discards the destination pixels that are not covered by source pixels.
|
||
|
* Draws remaining destination pixels over source pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src}\)</p>
|
||
|
* <p>\(C_{out} = \alpha_{src} * C_{dst} + (1 - \alpha_{dst}) * C_{src}\)</p>
|
||
|
*/
|
||
|
DST_ATOP(10),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_XOR.png" />
|
||
|
* <figcaption>Discards the source and destination pixels where source pixels
|
||
|
* cover destination pixels. Draws remaining source pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)
|
||
|
* </p>
|
||
|
* <p>\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst}\)</p>
|
||
|
*/
|
||
|
XOR(11),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_PLUS.png" />
|
||
|
* <figcaption>Adds the source pixels to the destination pixels and saturates
|
||
|
* the result.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = max(0, min(\alpha_{src} + \alpha_{dst}, 1))\)</p>
|
||
|
* <p>\(C_{out} = max(0, min(C_{src} + C_{dst}, 1))\)</p>
|
||
|
*/
|
||
|
PLUS(12),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_MODULATE.png" />
|
||
|
* <figcaption>Multiplies the source and destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = C_{src} * C_{dst}\)</p>
|
||
|
*
|
||
|
*/
|
||
|
MODULATE(13),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SCREEN.png" />
|
||
|
* <figcaption>
|
||
|
* Adds the source and destination pixels, then subtracts the
|
||
|
* source pixels multiplied by the destination.
|
||
|
* </figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} = C_{src} + C_{dst} - C_{src} * C_{dst}\)</p>
|
||
|
*/
|
||
|
SCREEN(14),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_OVERLAY.png" />
|
||
|
* <figcaption>
|
||
|
* Multiplies or screens the source and destination depending on the
|
||
|
* destination color.
|
||
|
* </figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>\(\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}\)</p>
|
||
|
*/
|
||
|
OVERLAY(15),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DARKEN.png" />
|
||
|
* <figcaption>
|
||
|
* Retains the smallest component of the source and
|
||
|
* destination pixels.
|
||
|
* </figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>
|
||
|
* \(C_{out} =
|
||
|
* (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + min(C_{src}, C_{dst})\)
|
||
|
* </p>
|
||
|
*/
|
||
|
DARKEN(16),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_LIGHTEN.png" />
|
||
|
* <figcaption>Retains the largest component of the source and
|
||
|
* destination pixel.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>
|
||
|
* \(C_{out} =
|
||
|
* (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + max(C_{src}, C_{dst})\)
|
||
|
* </p>
|
||
|
*/
|
||
|
LIGHTEN(17),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_COLOR_DODGE.png" />
|
||
|
* <figcaption>Makes destination brighter to reflect source.</figcaption>
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \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}
|
||
|
* </p>
|
||
|
*/
|
||
|
COLOR_DODGE(18),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_COLOR_BURN.png" />
|
||
|
* <figcaption>Makes destination darker to reflect source.</figcaption>
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \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}
|
||
|
* </p>
|
||
|
*/
|
||
|
COLOR_BURN(19),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_HARD_LIGHT.png" />
|
||
|
* <figcaption>Makes destination lighter or darker, depending on source.</figcaption>
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \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}
|
||
|
* </p>
|
||
|
*/
|
||
|
HARD_LIGHT(20),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SOFT_LIGHT.png" />
|
||
|
* <figcaption>Makes destination lighter or darker, depending on source.</figcaption>
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* Where
|
||
|
* \begin{equation}
|
||
|
* m =
|
||
|
* \begin{cases}
|
||
|
* C_{dst} / \alpha_{dst} & \alpha_{dst} \gt 0 \\
|
||
|
* 0 & otherwise
|
||
|
* \end{cases}
|
||
|
* \end{equation}
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \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}
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \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}
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \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}
|
||
|
* </p>
|
||
|
*/
|
||
|
SOFT_LIGHT(21),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DIFFERENCE.png" />
|
||
|
* <figcaption>Subtracts darker from lighter with higher contrast.</figcaption>
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \begin{equation}
|
||
|
* \alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}
|
||
|
* \end{equation}
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \begin{equation}
|
||
|
* C_{out} = C_{src} + C_{dst} - 2 * min(C_{src}
|
||
|
* * \alpha_{dst}, C_{dst} * \alpha_{src})
|
||
|
* \end{equation}
|
||
|
* </p>
|
||
|
*/
|
||
|
DIFFERENCE(22),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_DIFFERENCE.png" />
|
||
|
* <figcaption>Subtracts darker from lighter with lower contrast.</figcaption>
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \begin{equation}
|
||
|
* \alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}
|
||
|
* \end{equation}
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* \begin{equation}
|
||
|
* C_{out} = C_{src} + C_{dst} - 2 * C_{src} * C_{dst}
|
||
|
* \end{equation}
|
||
|
* </p>
|
||
|
*/
|
||
|
EXCLUSION(23),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_MODULATE.png" />
|
||
|
* <figcaption>Multiplies the source and destination pixels.</figcaption>
|
||
|
* </p>
|
||
|
* <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
|
||
|
* <p>\(C_{out} =
|
||
|
* C_{src} * (1 - \alpha_{dst}) + C_{dst} * (1 - \alpha_{src}) + (C_{src} * C_{dst})\)
|
||
|
* </p>
|
||
|
*/
|
||
|
MULTIPLY(24),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_HUE.png" />
|
||
|
* <figcaption>
|
||
|
* Replaces hue of destination with hue of source, leaving saturation
|
||
|
* and luminosity unchanged.
|
||
|
* </figcaption>
|
||
|
* </p>
|
||
|
*/
|
||
|
HUE(25),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_SATURATION.png" />
|
||
|
* <figcaption>
|
||
|
* Replaces saturation of destination saturation hue of source, leaving hue and
|
||
|
* luminosity unchanged.
|
||
|
* </figcaption>
|
||
|
* </p>
|
||
|
*/
|
||
|
SATURATION(26),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_COLOR.png" />
|
||
|
* <figcaption>
|
||
|
* Replaces hue and saturation of destination with hue and saturation of source,
|
||
|
* leaving luminosity unchanged.
|
||
|
* </figcaption>
|
||
|
* </p>
|
||
|
*/
|
||
|
COLOR(27),
|
||
|
|
||
|
/**
|
||
|
* {@usesMathJax}
|
||
|
*
|
||
|
* <p>
|
||
|
* <img src="{@docRoot}reference/android/images/graphics/blendmode_LUMINOSITY.png" />
|
||
|
* <figcaption>
|
||
|
* Replaces luminosity of destination with luminosity of source, leaving hue and
|
||
|
* saturation unchanged.
|
||
|
* </figcaption>
|
||
|
* </p>
|
||
|
*/
|
||
|
LUMINOSITY(28);
|
||
|
|
||
|
private static final BlendMode[] BLEND_MODES = values();
|
||
|
|
||
|
/**
|
||
|
* @hide
|
||
|
*/
|
||
|
public static @Nullable BlendMode fromValue(int value) {
|
||
|
for (BlendMode mode : BLEND_MODES) {
|
||
|
if (mode.mXfermode.porterDuffMode == value) {
|
||
|
return mode;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @hide
|
||
|
*/
|
||
|
public static int toValue(BlendMode mode) {
|
||
|
return mode.getXfermode().porterDuffMode;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @hide
|
||
|
*/
|
||
|
public static @Nullable PorterDuff.Mode blendModeToPorterDuffMode(@Nullable BlendMode mode) {
|
||
|
if (mode != null) {
|
||
|
switch (mode) {
|
||
|
case CLEAR:
|
||
|
return PorterDuff.Mode.CLEAR;
|
||
|
case SRC:
|
||
|
return PorterDuff.Mode.SRC;
|
||
|
case DST:
|
||
|
return PorterDuff.Mode.DST;
|
||
|
case SRC_OVER:
|
||
|
return PorterDuff.Mode.SRC_OVER;
|
||
|
case DST_OVER:
|
||
|
return PorterDuff.Mode.DST_OVER;
|
||
|
case SRC_IN:
|
||
|
return PorterDuff.Mode.SRC_IN;
|
||
|
case DST_IN:
|
||
|
return PorterDuff.Mode.DST_IN;
|
||
|
case SRC_OUT:
|
||
|
return PorterDuff.Mode.SRC_OUT;
|
||
|
case DST_OUT:
|
||
|
return PorterDuff.Mode.DST_OUT;
|
||
|
case SRC_ATOP:
|
||
|
return PorterDuff.Mode.SRC_ATOP;
|
||
|
case DST_ATOP:
|
||
|
return PorterDuff.Mode.DST_ATOP;
|
||
|
case XOR:
|
||
|
return PorterDuff.Mode.XOR;
|
||
|
case DARKEN:
|
||
|
return PorterDuff.Mode.DARKEN;
|
||
|
case LIGHTEN:
|
||
|
return PorterDuff.Mode.LIGHTEN;
|
||
|
// b/73224934 PorterDuff Multiply maps to Skia Modulate
|
||
|
case MODULATE:
|
||
|
return PorterDuff.Mode.MULTIPLY;
|
||
|
case SCREEN:
|
||
|
return PorterDuff.Mode.SCREEN;
|
||
|
case PLUS:
|
||
|
return PorterDuff.Mode.ADD;
|
||
|
case OVERLAY:
|
||
|
return PorterDuff.Mode.OVERLAY;
|
||
|
default:
|
||
|
return null;
|
||
|
}
|
||
|
} else {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@NonNull
|
||
|
private final Xfermode mXfermode;
|
||
|
|
||
|
BlendMode(int mode) {
|
||
|
mXfermode = new Xfermode();
|
||
|
mXfermode.porterDuffMode = mode;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @hide
|
||
|
*/
|
||
|
@NonNull
|
||
|
public Xfermode getXfermode() {
|
||
|
return mXfermode;
|
||
|
}
|
||
|
}
|