Bitmap::compress gainmap support

Test: photos caching
Bug: 267536879
Change-Id: I6acc4188c93bbb1363e0a578bad04523052419ca
This commit is contained in:
John Reck
2023-02-01 22:26:00 -05:00
parent 255dc584a2
commit 340620d080

View File

@@ -41,6 +41,7 @@
#include <SkHighContrastFilter.h>
#include <SkImageEncoder.h>
#include <SkImagePriv.h>
#include <SkJpegGainmapEncoder.h>
#include <SkPixmap.h>
#include <SkRect.h>
#include <SkStream.h>
@@ -458,6 +459,16 @@ BitmapPalette Bitmap::computePalette(const SkImageInfo& info, const void* addr,
}
bool Bitmap::compress(JavaCompressFormat format, int32_t quality, SkWStream* stream) {
#ifdef __ANDROID__ // TODO: This isn't built for host for some reason?
if (hasGainmap() && format == JavaCompressFormat::Jpeg) {
SkBitmap baseBitmap = getSkBitmap();
SkBitmap gainmapBitmap = gainmap()->bitmap->getSkBitmap();
SkJpegEncoder::Options options{.fQuality = quality};
return SkJpegGainmapEncoder::EncodeJpegR(stream, baseBitmap.pixmap(), options,
gainmapBitmap.pixmap(), options, gainmap()->info);
}
#endif
SkBitmap skbitmap;
getSkBitmap(&skbitmap);
return compress(skbitmap, format, quality, stream);