diff --git a/libs/hwui/jni/BitmapFactory.cpp b/libs/hwui/jni/BitmapFactory.cpp index 38d17de166e98..8abcd9a59122d 100644 --- a/libs/hwui/jni/BitmapFactory.cpp +++ b/libs/hwui/jni/BitmapFactory.cpp @@ -194,7 +194,11 @@ static bool decodeGainmap(std::unique_ptr gainmapStream, const SkGainm ALOGE("Can not create a codec for Gainmap."); return false; } - SkColorType decodeColorType = codec->computeOutputColorType(kN32_SkColorType); + SkColorType decodeColorType = kN32_SkColorType; + if (codec->getInfo().colorType() == kGray_8_SkColorType) { + decodeColorType = kGray_8_SkColorType; + } + decodeColorType = codec->computeOutputColorType(decodeColorType); sk_sp decodeColorSpace = codec->computeOutputColorSpace(decodeColorType, nullptr); SkISize size = codec->getSampledDimensions(sampleSize); @@ -217,7 +221,11 @@ static bool decodeGainmap(std::unique_ptr gainmapStream, const SkGainm const SkImageInfo decodeInfo = SkImageInfo::Make(size.width(), size.height(), decodeColorType, alphaType, decodeColorSpace); - const SkImageInfo& bitmapInfo = decodeInfo; + SkImageInfo bitmapInfo = decodeInfo; + if (decodeColorType == kGray_8_SkColorType) { + // We treat gray8 as alpha8 in Bitmap's API surface + bitmapInfo = bitmapInfo.makeColorType(kAlpha_8_SkColorType); + } SkBitmap decodeBitmap; sk_sp nativeBitmap = nullptr;