Cache set wallpaper as PNG instead of JPEG

JPEG is a lossy image format: if image bytes are encoded to JPEG, then
the JPEG is decoded to image bytes, those bytes will _always_ differ
from the original bytes.

Caching as PNG ensures that the same colors will be extracted from the
wallpaper as were displayed in the Wallpaper Picker preview using
WallpaperColors.fromBitmap. Otherwise, the cached wallpaper differs from
the bitmap used with WallpaperColors.fromBitmap for the preview in
wallpaper picker.

Bug: 189931209
Test: Test tons and tons of wallpapers over a couple days.
Change-Id: Ifc451f540d5e944055a5e0fb4be6a79c4bd5a939
This commit is contained in:
James O'Leary
2021-06-02 10:24:17 -04:00
parent 1a3245d5a1
commit b0c0318d09

View File

@@ -752,7 +752,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
f = new FileOutputStream(wallpaper.cropFile);
bos = new BufferedOutputStream(f, 32*1024);
finalCrop.compress(Bitmap.CompressFormat.JPEG, 100, bos);
finalCrop.compress(Bitmap.CompressFormat.PNG, 100, bos);
bos.flush(); // don't rely on the implicit flush-at-close when noting success
success = true;
}