Merge "Color API to create/store wide-gamut colors in a long"
This commit is contained in:
committed by
Android (Google) Code Review
commit
03ab3520a8
@@ -12121,15 +12121,57 @@ package android.graphics {
|
||||
method public static int HSVToColor(float[]);
|
||||
method public static int HSVToColor(int, float[]);
|
||||
method public static void RGBToHSV(int, int, int, float[]);
|
||||
method public float alpha();
|
||||
method public static float alpha(long);
|
||||
method public static int alpha(int);
|
||||
method public static int argb(int, int, int, int);
|
||||
method public static int argb(float, float, float, float);
|
||||
method public float blue();
|
||||
method public static float blue(long);
|
||||
method public static int blue(int);
|
||||
method public static android.graphics.ColorSpace colorSpace(long);
|
||||
method public static void colorToHSV(int, float[]);
|
||||
method public android.graphics.Color convert(android.graphics.ColorSpace);
|
||||
method public static long convert(int, android.graphics.ColorSpace);
|
||||
method public static long convert(long, android.graphics.ColorSpace);
|
||||
method public static long convert(float, float, float, float, android.graphics.ColorSpace, android.graphics.ColorSpace);
|
||||
method public static long convert(long, android.graphics.ColorSpace.Connector);
|
||||
method public static long convert(float, float, float, float, android.graphics.ColorSpace.Connector);
|
||||
method public android.graphics.ColorSpace getColorSpace();
|
||||
method public float getComponent(int);
|
||||
method public int getComponentCount();
|
||||
method public float[] getComponents();
|
||||
method public android.graphics.ColorSpace.Model getModel();
|
||||
method public float green();
|
||||
method public static float green(long);
|
||||
method public static int green(int);
|
||||
method public static boolean isInColorSpace(long, android.graphics.ColorSpace);
|
||||
method public boolean isSrgb();
|
||||
method public static boolean isSrgb(long);
|
||||
method public boolean isWideGamut();
|
||||
method public static boolean isWideGamut(long);
|
||||
method public float luminance();
|
||||
method public static float luminance(long);
|
||||
method public static float luminance(int);
|
||||
method public long pack();
|
||||
method public static long pack(int);
|
||||
method public static long pack(float, float, float);
|
||||
method public static long pack(float, float, float, float);
|
||||
method public static long pack(float, float, float, float, android.graphics.ColorSpace);
|
||||
method public static int parseColor(java.lang.String);
|
||||
method public float red();
|
||||
method public static float red(long);
|
||||
method public static int red(int);
|
||||
method public static int rgb(int, int, int);
|
||||
method public static int rgb(float, float, float);
|
||||
method public int toArgb();
|
||||
method public static int toArgb(long);
|
||||
method public static android.graphics.Color valueOf(int);
|
||||
method public static android.graphics.Color valueOf(long);
|
||||
method public static android.graphics.Color valueOf(float, float, float);
|
||||
method public static android.graphics.Color valueOf(float, float, float, float);
|
||||
method public static android.graphics.Color valueOf(float, float, float, float, android.graphics.ColorSpace);
|
||||
method public static android.graphics.Color valueOf(float[], android.graphics.ColorSpace);
|
||||
field public static final int BLACK = -16777216; // 0xff000000
|
||||
field public static final int BLUE = -16776961; // 0xff0000ff
|
||||
field public static final int CYAN = -16711681; // 0xff00ffff
|
||||
@@ -12201,7 +12243,7 @@ package android.graphics {
|
||||
field public static final float[] ILLUMINANT_D65;
|
||||
field public static final float[] ILLUMINANT_D75;
|
||||
field public static final float[] ILLUMINANT_E;
|
||||
field public static final int MAX_ID = 64; // 0x40
|
||||
field public static final int MAX_ID = 63; // 0x3f
|
||||
field public static final int MIN_ID = -1; // 0xffffffff
|
||||
}
|
||||
|
||||
|
||||
@@ -12636,15 +12636,57 @@ package android.graphics {
|
||||
method public static int HSVToColor(float[]);
|
||||
method public static int HSVToColor(int, float[]);
|
||||
method public static void RGBToHSV(int, int, int, float[]);
|
||||
method public float alpha();
|
||||
method public static float alpha(long);
|
||||
method public static int alpha(int);
|
||||
method public static int argb(int, int, int, int);
|
||||
method public static int argb(float, float, float, float);
|
||||
method public float blue();
|
||||
method public static float blue(long);
|
||||
method public static int blue(int);
|
||||
method public static android.graphics.ColorSpace colorSpace(long);
|
||||
method public static void colorToHSV(int, float[]);
|
||||
method public android.graphics.Color convert(android.graphics.ColorSpace);
|
||||
method public static long convert(int, android.graphics.ColorSpace);
|
||||
method public static long convert(long, android.graphics.ColorSpace);
|
||||
method public static long convert(float, float, float, float, android.graphics.ColorSpace, android.graphics.ColorSpace);
|
||||
method public static long convert(long, android.graphics.ColorSpace.Connector);
|
||||
method public static long convert(float, float, float, float, android.graphics.ColorSpace.Connector);
|
||||
method public android.graphics.ColorSpace getColorSpace();
|
||||
method public float getComponent(int);
|
||||
method public int getComponentCount();
|
||||
method public float[] getComponents();
|
||||
method public android.graphics.ColorSpace.Model getModel();
|
||||
method public float green();
|
||||
method public static float green(long);
|
||||
method public static int green(int);
|
||||
method public static boolean isInColorSpace(long, android.graphics.ColorSpace);
|
||||
method public boolean isSrgb();
|
||||
method public static boolean isSrgb(long);
|
||||
method public boolean isWideGamut();
|
||||
method public static boolean isWideGamut(long);
|
||||
method public float luminance();
|
||||
method public static float luminance(long);
|
||||
method public static float luminance(int);
|
||||
method public long pack();
|
||||
method public static long pack(int);
|
||||
method public static long pack(float, float, float);
|
||||
method public static long pack(float, float, float, float);
|
||||
method public static long pack(float, float, float, float, android.graphics.ColorSpace);
|
||||
method public static int parseColor(java.lang.String);
|
||||
method public float red();
|
||||
method public static float red(long);
|
||||
method public static int red(int);
|
||||
method public static int rgb(int, int, int);
|
||||
method public static int rgb(float, float, float);
|
||||
method public int toArgb();
|
||||
method public static int toArgb(long);
|
||||
method public static android.graphics.Color valueOf(int);
|
||||
method public static android.graphics.Color valueOf(long);
|
||||
method public static android.graphics.Color valueOf(float, float, float);
|
||||
method public static android.graphics.Color valueOf(float, float, float, float);
|
||||
method public static android.graphics.Color valueOf(float, float, float, float, android.graphics.ColorSpace);
|
||||
method public static android.graphics.Color valueOf(float[], android.graphics.ColorSpace);
|
||||
field public static final int BLACK = -16777216; // 0xff000000
|
||||
field public static final int BLUE = -16776961; // 0xff0000ff
|
||||
field public static final int CYAN = -16711681; // 0xff00ffff
|
||||
@@ -12716,7 +12758,7 @@ package android.graphics {
|
||||
field public static final float[] ILLUMINANT_D65;
|
||||
field public static final float[] ILLUMINANT_D75;
|
||||
field public static final float[] ILLUMINANT_E;
|
||||
field public static final int MAX_ID = 64; // 0x40
|
||||
field public static final int MAX_ID = 63; // 0x3f
|
||||
field public static final int MIN_ID = -1; // 0xffffffff
|
||||
}
|
||||
|
||||
|
||||
@@ -12153,15 +12153,57 @@ package android.graphics {
|
||||
method public static int HSVToColor(float[]);
|
||||
method public static int HSVToColor(int, float[]);
|
||||
method public static void RGBToHSV(int, int, int, float[]);
|
||||
method public float alpha();
|
||||
method public static float alpha(long);
|
||||
method public static int alpha(int);
|
||||
method public static int argb(int, int, int, int);
|
||||
method public static int argb(float, float, float, float);
|
||||
method public float blue();
|
||||
method public static float blue(long);
|
||||
method public static int blue(int);
|
||||
method public static android.graphics.ColorSpace colorSpace(long);
|
||||
method public static void colorToHSV(int, float[]);
|
||||
method public android.graphics.Color convert(android.graphics.ColorSpace);
|
||||
method public static long convert(int, android.graphics.ColorSpace);
|
||||
method public static long convert(long, android.graphics.ColorSpace);
|
||||
method public static long convert(float, float, float, float, android.graphics.ColorSpace, android.graphics.ColorSpace);
|
||||
method public static long convert(long, android.graphics.ColorSpace.Connector);
|
||||
method public static long convert(float, float, float, float, android.graphics.ColorSpace.Connector);
|
||||
method public android.graphics.ColorSpace getColorSpace();
|
||||
method public float getComponent(int);
|
||||
method public int getComponentCount();
|
||||
method public float[] getComponents();
|
||||
method public android.graphics.ColorSpace.Model getModel();
|
||||
method public float green();
|
||||
method public static float green(long);
|
||||
method public static int green(int);
|
||||
method public static boolean isInColorSpace(long, android.graphics.ColorSpace);
|
||||
method public boolean isSrgb();
|
||||
method public static boolean isSrgb(long);
|
||||
method public boolean isWideGamut();
|
||||
method public static boolean isWideGamut(long);
|
||||
method public float luminance();
|
||||
method public static float luminance(long);
|
||||
method public static float luminance(int);
|
||||
method public long pack();
|
||||
method public static long pack(int);
|
||||
method public static long pack(float, float, float);
|
||||
method public static long pack(float, float, float, float);
|
||||
method public static long pack(float, float, float, float, android.graphics.ColorSpace);
|
||||
method public static int parseColor(java.lang.String);
|
||||
method public float red();
|
||||
method public static float red(long);
|
||||
method public static int red(int);
|
||||
method public static int rgb(int, int, int);
|
||||
method public static int rgb(float, float, float);
|
||||
method public int toArgb();
|
||||
method public static int toArgb(long);
|
||||
method public static android.graphics.Color valueOf(int);
|
||||
method public static android.graphics.Color valueOf(long);
|
||||
method public static android.graphics.Color valueOf(float, float, float);
|
||||
method public static android.graphics.Color valueOf(float, float, float, float);
|
||||
method public static android.graphics.Color valueOf(float, float, float, float, android.graphics.ColorSpace);
|
||||
method public static android.graphics.Color valueOf(float[], android.graphics.ColorSpace);
|
||||
field public static final int BLACK = -16777216; // 0xff000000
|
||||
field public static final int BLUE = -16776961; // 0xff0000ff
|
||||
field public static final int CYAN = -16711681; // 0xff00ffff
|
||||
@@ -12233,7 +12275,7 @@ package android.graphics {
|
||||
field public static final float[] ILLUMINANT_D65;
|
||||
field public static final float[] ILLUMINANT_D75;
|
||||
field public static final float[] ILLUMINANT_E;
|
||||
field public static final int MAX_ID = 64; // 0x40
|
||||
field public static final int MAX_ID = 63; // 0x3f
|
||||
field public static final int MIN_ID = -1; // 0xffffffff
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.graphics;
|
||||
|
||||
import android.annotation.AnyThread;
|
||||
import android.annotation.ColorInt;
|
||||
import android.annotation.IntRange;
|
||||
import android.annotation.NonNull;
|
||||
@@ -126,7 +127,8 @@ import java.util.function.DoubleUnaryOperator;
|
||||
*
|
||||
* <p>To visualize and debug color spaces, you can call {@link #createRenderer()}.
|
||||
* The {@link Renderer} created by calling this method can be used to compare
|
||||
* color spaces and locate specific colors on a CIE 1931 chromaticity diagram.</p>
|
||||
* color spaces and locate specific colors on a CIE 1931 or CIE 1976 UCS
|
||||
* chromaticity diagram.</p>
|
||||
*
|
||||
* <p>The following code snippet shows how to render a bitmap that compares
|
||||
* the color gamuts and white points of {@link Named#DCI_P3} and
|
||||
@@ -155,6 +157,7 @@ import java.util.function.DoubleUnaryOperator;
|
||||
* @see Adaptation
|
||||
* @see Renderer
|
||||
*/
|
||||
@AnyThread
|
||||
@SuppressWarnings("StaticInitializerReferencesSubClass")
|
||||
public abstract class ColorSpace {
|
||||
/**
|
||||
@@ -216,7 +219,7 @@ public abstract class ColorSpace {
|
||||
*
|
||||
* @see #getId()
|
||||
*/
|
||||
public static final int MAX_ID = 64; // Do not change, used to encode in longs
|
||||
public static final int MAX_ID = 63; // Do not change, used to encode in longs
|
||||
|
||||
private static final float[] SRGB_PRIMARIES = { 0.640f, 0.330f, 0.300f, 0.600f, 0.150f, 0.060f };
|
||||
private static final float[] NTSC_1953_PRIMARIES = { 0.67f, 0.33f, 0.21f, 0.71f, 0.14f, 0.08f };
|
||||
@@ -341,11 +344,11 @@ public abstract class ColorSpace {
|
||||
* \end{equation}\)
|
||||
* </td>
|
||||
* </tr>
|
||||
* <tr><td>Range</td><td colspan="4">\([-0.5..7.5[\)</td></tr>
|
||||
* <tr><td>Range</td><td colspan="4">\([-0.799..2.399[\)</td></tr>
|
||||
* </table>
|
||||
* <p>
|
||||
* <img src="{@docRoot}reference/android/images/graphics/colorspace_scrgb.png" />
|
||||
* <figcaption style="text-align: center;">Extended RGB (orange) vs sRGB (white)</figcaption>
|
||||
* <figcaption style="text-align: center;">Extended sRGB (orange) vs sRGB (white)</figcaption>
|
||||
* </p>
|
||||
*/
|
||||
EXTENDED_SRGB,
|
||||
@@ -368,11 +371,11 @@ public abstract class ColorSpace {
|
||||
* <td>Electro-optical transfer function</td>
|
||||
* <td colspan="4">\(C_{linear} = C_{scRGB}\)</td>
|
||||
* </tr>
|
||||
* <tr><td>Range</td><td colspan="4">\([-0.5..7.5[\)</td></tr>
|
||||
* <tr><td>Range</td><td colspan="4">\([-0.5..7.499[\)</td></tr>
|
||||
* </table>
|
||||
* <p>
|
||||
* <img src="{@docRoot}reference/android/images/graphics/colorspace_scrgb.png" />
|
||||
* <figcaption style="text-align: center;">Extended RGB (orange) vs sRGB (white)</figcaption>
|
||||
* <figcaption style="text-align: center;">Extended sRGB (orange) vs sRGB (white)</figcaption>
|
||||
* </p>
|
||||
*/
|
||||
LINEAR_EXTENDED_SRGB,
|
||||
@@ -1090,7 +1093,7 @@ public abstract class ColorSpace {
|
||||
* space's color model. The resulting value is passed back in the specified
|
||||
* array.</p>
|
||||
*
|
||||
* <p class="note>The specified array's length must be at least equal to
|
||||
* <p class="note">The specified array's length must be at least equal to
|
||||
* to the number of color components as returned by
|
||||
* {@link Model#getComponentCount()}, and its first 3 values must
|
||||
* be the XYZ components to convert from.</p>
|
||||
@@ -1125,6 +1128,7 @@ public abstract class ColorSpace {
|
||||
* @return A string representation of the object
|
||||
*/
|
||||
@Override
|
||||
@NonNull
|
||||
public String toString() {
|
||||
return mName + " (id=" + mId + ", model=" + mModel + ")";
|
||||
}
|
||||
@@ -1403,7 +1407,7 @@ public abstract class ColorSpace {
|
||||
ILLUMINANT_D65,
|
||||
x -> absRcpResponse(x, 2.4, 1 / 1.055, 0.055 / 1.055, 1 / 12.92, 0.04045),
|
||||
x -> absResponse(x, 2.4, 1 / 1.055, 0.055 / 1.055, 1 / 12.92, 0.04045),
|
||||
-0.5f, 7.5f,
|
||||
-0.799f, 2.399f,
|
||||
Named.EXTENDED_SRGB.ordinal()
|
||||
);
|
||||
sNamedColorSpaces[Named.LINEAR_EXTENDED_SRGB.ordinal()] = new ColorSpace.Rgb(
|
||||
@@ -1412,7 +1416,7 @@ public abstract class ColorSpace {
|
||||
ILLUMINANT_D65,
|
||||
DoubleUnaryOperator.identity(),
|
||||
DoubleUnaryOperator.identity(),
|
||||
-0.5f, 7.5f,
|
||||
-0.5f, 7.499f,
|
||||
Named.LINEAR_EXTENDED_SRGB.ordinal()
|
||||
);
|
||||
sNamedColorSpaces[Named.BT709.ordinal()] = new ColorSpace.Rgb(
|
||||
@@ -1437,8 +1441,8 @@ public abstract class ColorSpace {
|
||||
"SMPTE RP 431-2-2007 DCI (P3)",
|
||||
new float[] { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f },
|
||||
new float[] { 0.314f, 0.351f },
|
||||
x -> Math.pow(x, 1 / 2.6),
|
||||
x -> Math.pow(x, 2.6),
|
||||
x -> Math.pow(x < 0.0f ? 0.0f : x, 1 / 2.6),
|
||||
x -> Math.pow(x < 0.0f ? 0.0f : x, 2.6),
|
||||
0.0f, 1.0f,
|
||||
Named.DCI_P3.ordinal()
|
||||
);
|
||||
@@ -1473,8 +1477,8 @@ public abstract class ColorSpace {
|
||||
"Adobe RGB (1998)",
|
||||
new float[] { 0.64f, 0.33f, 0.21f, 0.71f, 0.15f, 0.06f },
|
||||
ILLUMINANT_D65,
|
||||
x -> Math.pow(x, 1 / 2.2),
|
||||
x -> Math.pow(x, 2.2),
|
||||
x -> Math.pow(x < 0.0f ? 0.0f : x, 1 / 2.2),
|
||||
x -> Math.pow(x < 0.0f ? 0.0f : x, 2.2),
|
||||
0.0f, 1.0f,
|
||||
Named.ADOBE_RGB.ordinal()
|
||||
);
|
||||
@@ -1720,6 +1724,7 @@ public abstract class ColorSpace {
|
||||
/**
|
||||
* Implementation of the CIE XYZ color space. Assumes the white point is D50.
|
||||
*/
|
||||
@AnyThread
|
||||
private static final class Xyz extends ColorSpace {
|
||||
private Xyz(@NonNull String name, @IntRange(from = MIN_ID, to = MAX_ID) int id) {
|
||||
super(name, Model.XYZ, id);
|
||||
@@ -1765,6 +1770,7 @@ public abstract class ColorSpace {
|
||||
* Implementation of the CIE L*a*b* color space. Its PCS is CIE XYZ
|
||||
* with a white point of D50.
|
||||
*/
|
||||
@AnyThread
|
||||
private static final class Lab extends ColorSpace {
|
||||
private static final float A = 216.0f / 24389.0f;
|
||||
private static final float B = 841.0f / 108.0f;
|
||||
@@ -1949,6 +1955,7 @@ public abstract class ColorSpace {
|
||||
* <p>To learn more about the white point adaptation process, refer to the
|
||||
* documentation of {@link Adaptation}.</p>
|
||||
*/
|
||||
@AnyThread
|
||||
public static class Rgb extends ColorSpace {
|
||||
@NonNull private final float[] mWhitePoint;
|
||||
@NonNull private final float[] mPrimaries;
|
||||
@@ -2337,7 +2344,7 @@ public abstract class ColorSpace {
|
||||
* to "gamma space" (gamma encoded). The terms gamma space and gamma encoded
|
||||
* are frequently used because many OETFs can be closely approximated using
|
||||
* a simple power function of the form \(x^{\frac{1}{\gamma}}\) (the
|
||||
* approximation of the {@link Named#SRGB sRGB} EOTF uses \(\gamma=2.2\)
|
||||
* approximation of the {@link Named#SRGB sRGB} OETF uses \(\gamma=2.2\)
|
||||
* for instance).</p>
|
||||
*
|
||||
* @return A transfer function that converts from linear space to "gamma space"
|
||||
@@ -2346,7 +2353,7 @@ public abstract class ColorSpace {
|
||||
*/
|
||||
@NonNull
|
||||
public DoubleUnaryOperator getOetf() {
|
||||
return mOetf;
|
||||
return mClampedOetf;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2369,7 +2376,7 @@ public abstract class ColorSpace {
|
||||
*/
|
||||
@NonNull
|
||||
public DoubleUnaryOperator getEotf() {
|
||||
return mEotf;
|
||||
return mClampedEotf;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -2924,6 +2931,7 @@ public abstract class ColorSpace {
|
||||
* @see ColorSpace#connect(ColorSpace, RenderIntent)
|
||||
* @see ColorSpace#connect(ColorSpace)
|
||||
*/
|
||||
@AnyThread
|
||||
public static class Connector {
|
||||
@NonNull private final ColorSpace mSource;
|
||||
@NonNull private final ColorSpace mDestination;
|
||||
|
||||
Reference in New Issue
Block a user