diff options
| author | 2018-03-19 22:10:31 +0000 | |
|---|---|---|
| committer | 2018-03-19 22:10:31 +0000 | |
| commit | c45c2d65a58d1dfc64bc8532f33bd7b6c8e42f86 (patch) | |
| tree | d12d433d98199dc9a79d11230c270f5d9bce40d8 | |
| parent | 83c4690f5504a5c0c8ff16f7669d56d08348e028 (diff) | |
| parent | ce89a6e656a4d4d2c0e724c485e109cd6bc60997 (diff) | |
Merge "Work around incorrect Skia gamma" into pi-dev
| -rwxr-xr-x | core/jni/android/graphics/Bitmap.cpp | 10 | ||||
| -rw-r--r-- | graphics/java/android/graphics/Bitmap.java | 3 |
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); } |