summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcore/jni/android/graphics/Bitmap.cpp10
-rw-r--r--graphics/java/android/graphics/Bitmap.java3
2 files changed, 13 insertions, 0 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index ce4e384f253a..5a74a2473b32 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -1269,6 +1269,15 @@ static jboolean Bitmap_isSRGB(JNIEnv* env, jobject, jlong bitmapHandle) {
return GraphicsJNI::isColorSpaceSRGB(colorSpace);
}
+static jboolean Bitmap_isSRGBLinear(JNIEnv* env, jobject, jlong bitmapHandle) {
+ LocalScopedBitmap bitmapHolder(bitmapHandle);
+ if (!bitmapHolder.valid()) return JNI_FALSE;
+
+ SkColorSpace* colorSpace = bitmapHolder->info().colorSpace();
+ sk_sp<SkColorSpace> srgbLinear = SkColorSpace::MakeSRGBLinear();
+ return colorSpace == srgbLinear.get() ? JNI_TRUE : JNI_FALSE;
+}
+
static jboolean Bitmap_getColorSpace(JNIEnv* env, jobject, jlong bitmapHandle,
jfloatArray xyzArray, jfloatArray paramsArray) {
@@ -1614,6 +1623,7 @@ static const JNINativeMethod gBitmapMethods[] = {
(void*) Bitmap_createGraphicBufferHandle },
{ "nativeGetColorSpace", "(J[F[F)Z", (void*)Bitmap_getColorSpace },
{ "nativeIsSRGB", "(J)Z", (void*)Bitmap_isSRGB },
+ { "nativeIsSRGBLinear", "(J)Z", (void*)Bitmap_isSRGBLinear},
{ "nativeCopyColorSpace", "(JJ)V",
(void*)Bitmap_copyColorSpace },
};
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 52d29e32e464..e8ede94f62bb 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -1669,6 +1669,8 @@ public final class Bitmap implements Parcelable {
if (mColorSpace == null) {
if (nativeIsSRGB(mNativePtr)) {
mColorSpace = ColorSpace.get(ColorSpace.Named.SRGB);
+ } else if (getConfig() == Config.HARDWARE && nativeIsSRGBLinear(mNativePtr)) {
+ mColorSpace = ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB);
} else {
float[] xyz = new float[9];
float[] params = new float[7];
@@ -2092,5 +2094,6 @@ public final class Bitmap implements Parcelable {
private static native GraphicBuffer nativeCreateGraphicBufferHandle(long nativeBitmap);
private static native boolean nativeGetColorSpace(long nativePtr, float[] xyz, float[] params);
private static native boolean nativeIsSRGB(long nativePtr);
+ private static native boolean nativeIsSRGBLinear(long nativePtr);
private static native void nativeCopyColorSpace(long srcBitmap, long dstBitmap);
}