summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/java/android/graphics/Bitmap.java2
-rw-r--r--libs/hwui/hwui/Bitmap.cpp7
-rw-r--r--tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt34
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()
}))