diff options
author | 2023-05-09 17:50:33 -0400 | |
---|---|---|
committer | 2023-05-11 15:54:04 -0700 | |
commit | 818328c482092655cea6296b9dc99279e473ea93 (patch) | |
tree | f3289cb6b2701385a6c285c1e80bd1b2d93d65d1 | |
parent | bce1bf4fdc1ad147f31b40fb4c9df7cd06a84629 (diff) |
Support decoding gainmaps to alpha8 with BitmapFactory.
Bug: 271174821
Test: android.graphics.cts.GainmapTest
Change-Id: Ifdb285ea3f6bb6a3de44b216d1b4bb2c1826469a
-rw-r--r-- | libs/hwui/jni/BitmapFactory.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libs/hwui/jni/BitmapFactory.cpp b/libs/hwui/jni/BitmapFactory.cpp index 38d17de166e9..8abcd9a59122 100644 --- a/libs/hwui/jni/BitmapFactory.cpp +++ b/libs/hwui/jni/BitmapFactory.cpp @@ -194,7 +194,11 @@ static bool decodeGainmap(std::unique_ptr<SkStream> 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<SkColorSpace> decodeColorSpace = codec->computeOutputColorSpace(decodeColorType, nullptr); SkISize size = codec->getSampledDimensions(sampleSize); @@ -217,7 +221,11 @@ static bool decodeGainmap(std::unique_ptr<SkStream> 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<Bitmap> nativeBitmap = nullptr; |