当我在压缩之前和之后具有相同大小之后将质量从100更改为0(任何值)位图大小时。为什么?以及如何真正压缩它?
public static void checkSize(Bitmap tempBitmap, Context context) {
Log.d("IMAGES_", "SIZE before = " + tempBitmap.getByteCount());
Bitmap newBit = compress(tempBitmap, Bitmap.CompressFormat.PNG, 3);
Log.d("IMAGES_", "SIZE after = " + newBit.getByteCount());
}
public static Bitmap compress(Bitmap src, Bitmap.CompressFormat format,
int quality) {
ByteArrayOutputStream os = new ByteArrayOutputStream();
src.compress(format, quality, os);
byte[] array = os.toByteArray();
return BitmapFactory.decodeByteArray(array, 0, array.length);
}
结果:
答案 0 :(得分:1)
你测量错了。压缩的大小由array.length给出。然后,您将其解码回其完整大小和像素编码。如果您希望占用较小的内存,则需要:
答案 1 :(得分:1)
质量参数不适用于丢失的PNG格式,您需要将其更改为JPG才能生效。
即使您将其更改为JPG,前后位图仍将具有相同的尺寸,但质量不同。我认为你真正需要的是调用Bitmap.createScaledBitmap()来获得一个较小的位图,然后存储它。