在SD卡中存储位图会导致图像质量下降。

3
我将位图存储在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);

非常感谢...

2个回答

3
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中吗?这是一个好的方法吗?在我的情况下,图片数量不是很多。

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


可以将位图存储在SQLite中吗?这是一个好的方法吗?在我的情况下,图片数量并不是很多。@laalto - user3154663
你能给我提些建议吗? - user3154663

3

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

 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
compress的第二个参数是一个0-100的数字,表示在质量和文件大小之间的权衡:
  • 0 = 最小的文件大小,最差的质量
  • 100 = 最大的文件大小,最佳的质量
也许你会想要一个中间值,只需要试着调整数值,直到找到适合你应用程序的满意值。同时请参考compress() javadoc
如果可以的话,你也可以使用无损格式(如PNG)而不是JPEG。

可以将位图存储在SQLite中吗?这是一个好的方法吗?在我的情况下,图片数量并不是很多。@Stefano Sanfilippo - user3154663
@user3154663 在 SQLite 中存储并不能解决质量丢失的问题,这只是相当于在另一个文件夹中保存。此外,只应将 SQLite 私有数据库用于配置、历史记录等方面。用户媒体应该保持对用户可访问,存放在 /sdcard 中,除非你确实有非常特殊的需求。 - Stefano Sanfilippo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接