在位图压缩时保留图像的分辨率

Preserve resolution of image on bitmap compression

在我的应用程序中,我加载了每个可绘制对象并将其保存在 phone 内存中,但是当我执行此过程时,所有可绘制对象都变为大分辨率:

压缩前: FileA.PNG 在可绘制对象上:423x101; 9,52Ko

压缩后: FileA.PNG 在 SD 卡上:1269x303; 89,36Ko

你知道压缩后如何保持(之前)分辨率吗? 我尝试使用 JPEG,但结果相同。

public void SaveImage(int resId){

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), resId);

    try {

        OutputStream fOut = null;
        File file = new File(Environment.getExternalStorageDirectory() + File.separator + "Folder", getResources().getResourceEntryName(resId)+".PNG");
        file.createNewFile();
        fOut = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);
        fOut.flush();
        fOut.close();
        MediaStore.Images.Media.insertImage(this.getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());


    } catch (Exception e) {

    }
}

如果你能给我一个线索?

谢谢,

如果您获取一个可绘制对象并将其转换为位图,您会得到每个像素的编码,并且这是一个比原始 PNG 文件更大的文件。如果您随后以 100% 质量保存 PNG,那仍然是一张大图像。

将质量设置得更低:

 bmp.compress(Bitmap.CompressFormat.PNG, 20, fOut);

发挥质量,直到获得满意的结果。

如果您将图像存储在 drawable 文件夹中,它们会根据您设备的分辨率自动缩放,因此会产生不同的尺寸。

您需要将它们存储在文件夹 drawable-nodpirawassets 中的某个地方。