diff options
| -rw-r--r-- | graphics/java/android/graphics/Bitmap.java | 2 | ||||
| -rw-r--r-- | libs/hwui/hwui/Bitmap.cpp | 7 | ||||
| -rw-r--r-- | tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt | 34 |
3 files changed, 28 insertions, 15 deletions
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index a39dd0853ca6..8dd23b70ae61 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -2001,7 +2001,7 @@ public final class Bitmap implements Parcelable { checkPixelAccess(x, y); final ColorSpace cs = getColorSpace(); - if (cs.equals(ColorSpace.get(ColorSpace.Named.SRGB))) { + if (cs == null || cs.equals(ColorSpace.get(ColorSpace.Named.SRGB))) { return Color.valueOf(nativeGetPixel(mNativePtr, x, y)); } // The returned value is in kRGBA_F16_SkColorType, which is packed as diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp index ecf6cfc05444..b3eaa0ce5979 100644 --- a/libs/hwui/hwui/Bitmap.cpp +++ b/libs/hwui/hwui/Bitmap.cpp @@ -463,6 +463,13 @@ bool Bitmap::compress(JavaCompressFormat format, int32_t quality, SkWStream* str if (hasGainmap() && format == JavaCompressFormat::Jpeg) { SkBitmap baseBitmap = getSkBitmap(); SkBitmap gainmapBitmap = gainmap()->bitmap->getSkBitmap(); + if (gainmapBitmap.colorType() == SkColorType::kAlpha_8_SkColorType) { + SkBitmap greyGainmap; + auto greyInfo = gainmapBitmap.info().makeColorType(SkColorType::kGray_8_SkColorType); + greyGainmap.setInfo(greyInfo, gainmapBitmap.rowBytes()); + greyGainmap.setPixelRef(sk_ref_sp(gainmapBitmap.pixelRef()), 0, 0); + gainmapBitmap = std::move(greyGainmap); + } SkJpegEncoder::Options options{.fQuality = quality}; return SkJpegGainmapEncoder::EncodeHDRGM(stream, baseBitmap.pixmap(), options, gainmapBitmap.pixmap(), options, gainmap()->info); diff --git a/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt b/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt index 387564437b5f..e079b6d5e4db 100644 --- a/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt +++ b/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt @@ -80,10 +80,10 @@ class GainmapImage(context: Context, attrs: AttributeSet?) : FrameLayout(context spinner.adapter = adapter spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected( - parent: AdapterView<*>?, - view: View?, - position: Int, - id: Long + parent: AdapterView<*>?, + view: View?, + position: Int, + id: Long ) { setImage(position) } @@ -108,7 +108,7 @@ class GainmapImage(context: Context, attrs: AttributeSet?) : FrameLayout(context if (selectedImage == position) return selectedImage = position val source = ImageDecoder.createSource(resources.assets, - "gainmaps/${gainmapImages[position]}") + "gainmaps/${gainmapImages[position]}") doDecode(source) } @@ -137,16 +137,16 @@ class GainmapImage(context: Context, attrs: AttributeSet?) : FrameLayout(context gainmapVisualizer = map } else { gainmapVisualizer = Bitmap.createBitmap(map.width, map.height, - Bitmap.Config.ARGB_8888) + Bitmap.Config.ARGB_8888) val canvas = Canvas(gainmapVisualizer!!) val paint = Paint() paint.colorFilter = ColorMatrixColorFilter( - floatArrayOf( - 0f, 0f, 0f, 1f, 0f, - 0f, 0f, 0f, 1f, 0f, - 0f, 0f, 0f, 1f, 0f, - 0f, 0f, 0f, 0f, 255f - ) + floatArrayOf( + 0f, 0f, 0f, 1f, 0f, + 0f, 0f, 0f, 1f, 0f, + 0f, 0f, 0f, 1f, 0f, + 0f, 0f, 0f, 0f, 255f + ) ) canvas.drawBitmap(map, 0f, 0f, paint) canvas.setBitmap(null) @@ -174,8 +174,14 @@ class GainmapImage(context: Context, attrs: AttributeSet?) : FrameLayout(context if (bitmap == null) return imageView.setImage(ImageSource.cachedBitmap(when (outputMode) { - R.id.output_hdr -> { bitmap!!.gainmap = gainmap; bitmap!! } - R.id.output_sdr -> { bitmap!!.gainmap = null; bitmap!! } + R.id.output_hdr -> { + bitmap!!.gainmap = gainmap; bitmap!! + } + + R.id.output_sdr -> { + bitmap!!.gainmap = null; bitmap!! + } + R.id.output_gainmap -> gainmapVisualizer!! else -> throw IllegalStateException() })) |