From 6c382572e3136b4017dc80b5d389c771798b401a Mon Sep 17 00:00:00 2001 From: Matt Sarett Date: Tue, 21 Feb 2017 17:42:41 -0500 Subject: [PATCH] BitmapFactory: Leave the P3 color space on wide gamut bitmaps Test: Built, flashed, cts Change-Id: I242952cf690b821056dd5c13ec13f59120f573b5 --- core/jni/android/graphics/BitmapFactory.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 2aa16b281884e..30d6337d3e247 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -455,10 +455,17 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding const SkImageInfo decodeInfo = SkImageInfo::Make(size.width(), size.height(), decodeColorType, decodeAlphaType, codec->computeOutputColorSpace(decodeColorType)); - // When supported by the colorType, we will decode to sRGB (or linear sRGB). However, - // we only want to mark the bitmap as sRGB when linear blending is enabled. - SkImageInfo bitmapInfo = decodeInfo.makeAlphaType(alphaType) - .makeColorSpace(GraphicsJNI::colorSpaceForType(decodeColorType)); + SkImageInfo bitmapInfo = decodeInfo.makeAlphaType(alphaType); + + // For wide gamut images, we will leave the color space on the SkBitmap. Otherwise, + // use the default. + sk_sp srgb = + SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, + SkColorSpace::kSRGB_Gamut, + SkColorSpace::kNonLinearBlending_ColorSpaceFlag); + if (decodeInfo.colorSpace() == srgb.get()) { + bitmapInfo = bitmapInfo.makeColorSpace(GraphicsJNI::colorSpaceForType(decodeColorType)); + } if (decodeColorType == kGray_8_SkColorType) { // The legacy implementation of BitmapFactory used kAlpha8 for