Android Bitmap解码和缩放质量损失

时间:2015-07-28 05:30:23

标签: android bitmap bitmapfactory

我需要BitmapFactory.decode和BitmapFactory.createScaledBitmap的帮助。

在我们的应用中,我们使用此代码调整图片大小:

 public static synchronized File resizeBitmap(File file, int expectedWidth) throws IOException {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;
    options.inDither = false;
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), options);

    float width = bitmap.getWidth() / (float) expectedWidth;
    int expectedHeight = (int) (bitmap.getHeight() / width);

    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, expectedWidth, expectedHeight, true);
    String path = Environment.getExternalStorageDirectory().toString();
    File tempFile = new File(path, "temp.jpg");
    if (tempFile.exists())
        tempFile.delete();

    FileOutputStream fileOutputStream = new FileOutputStream(tempFile.getAbsolutePath());
    scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, fileOutputStream);
    fileOutputStream.flush();
    fileOutputStream.close();
    return tempFile;
}

但我们在Bitmap上有质量损失。我们能做些什么来解决这个问题?

在: Before 后: After

如您所见,图像变得更加锐利

2 个答案:

答案 0 :(得分:2)

scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, fileOutputStream);

在这行代码中,这里用80代替80表示压缩。 因此,您的图像将被压缩到80%的质量。

虽然预计会有一些质量下降。

您也可以尝试将其保存为.png而不是jpg,并尝试帮助

答案 1 :(得分:1)

尝试将其设置为100:

scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);