Merge "Implement encoding alpha8 gainmaps" into udc-dev

This commit is contained in:
John Reck
2023-03-03 15:02:23 +00:00
committed by Android (Google) Code Review
3 changed files with 28 additions and 15 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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()
}))