繁体   English   中英

在SD卡中存储位图会丢失图像质量

[英]Storing Bitmap in SD card loosing the image quality

我将位图存储在SD卡中,同时检索失去它们的质量。 我怎么能解决这个问题。 下面是我在Sd卡中存储位图的代码。

public void saveExternalPrivateStorage(File folderDir, String fname,
        Bitmap bitmap) {

    File file = new File(folderDir, fname);

    if (file.exists()) {
        file.delete();
    }
    if ((folderDir.mkdirs() || folderDir.isDirectory())) {
        try {
            FileOutputStream out = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 0, out);
            out.flush();
            out.close();
            System.out.println("Stored");
            System.out.println(file.getAbsolutePath());
            System.out.println("Stored");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

调用此方法:

File folderDir= new File(getActivity().getExternalFilesDir("myfolder"),"/images");
storeImagesIndevices.saveExternalPrivateStorage(folderDir,filename,imgBitmapUrls.get(i));

从SD卡检索:

Bitmap bitmap2 = BitmapFactory.decodeFile(folderDir+"/"+data.getTid());
        dbimgBitmapUrls.put(data.get_tid()-1, bitmap2);

非常感谢...

bitmap.compress(Bitmap.CompressFormat.JPEG, 0, out);

JPEG是一种有损压缩格式,您将0%设置为质量参数。 大约70%的东西通常是文件大小和图像质量之间的良好折衷:

bitmap.compress(Bitmap.CompressFormat.JPEG, 70, out);

或者使用无损格式,例如PNG,其中质量参数无关紧要:

bitmap.compress(Bitmap.CompressFormat.PNG, 0, out);

可以在SQLite中存储位图吗? 这是好方法。 在我的情况下,图像数量不是那么多

你可以,但你不应该。 更好的方法是将图像存储为文件,并将路径存储在数据库中。

您应该使用更高的压缩质量:

 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

compress的第二个参数是0-100数字,表示质量和文件大小之间的权衡:

  • 0 =文件最小,质量最差
  • 100 =最大文件大小,最佳质量

可能你会想要一个中间值,只需稍微玩一下,直到你找到一个满意的应用价值。 另请参阅compress() javadoc

如果是这种情况,您还可以使用无损格式(如PNG)而不是JPEG。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM