簡體   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