[英]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數字,表示質量和文件大小之間的權衡:
可能你會想要一個中間值,只需稍微玩一下,直到你找到一個滿意的應用價值。 另請參閱compress()
javadoc 。
如果是這種情況,您還可以使用無損格式(如PNG)而不是JPEG。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.