使用位图(图像)压缩图像时保存到图库但图像加载失败 -Android
while compressing the image using bitmap (image)saving to the gallery but image failed to load -Android
我在捕获图像后使用 bitmap.But 我正在尝试将图像保存在外部存储器中,它正在 blured.Please 给我解决方案。
这是我的代码 -
public void saveImageToExternalStorage() {
String root =Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
File myDir = new File(root + "/saved_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
File file1 = new File(myDir, fname);
if (file1.exists())
file1.delete();
try {
FileOutputStream out = new FileOutputStream(file1);
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
}
catch (Exception e) {
e.printStackTrace();
}
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this, new String[] { file1.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
}
}
可能是压缩错误。尝试修改
的参数
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
例如:
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
如果不符合您的要求,也可以保存为无损PNG格式:
finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
来源:
https://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, 整数, java.io.OutputStream)
您需要通知画廊添加了带有路径的新图像,或者我应该说您必须更新 MediaStore,以便将其作为新图像添加到 Media Store
private void addImageGallery( File file ) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); // setar isso
getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
public void saveImageToExternalStorage() {
String root =Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
File myDir = new File(root + "/saved_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
File file1 = new File(myDir, fname);
if (file1.exists())
file1.delete();
try {
FileOutputStream out = new FileOutputStream(file1);
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
}
catch (Exception e) {
e.printStackTrace();
}
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this, new String[] { file1.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
}
}
可能是压缩错误。尝试修改
的参数finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
例如:
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
如果不符合您的要求,也可以保存为无损PNG格式:
finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
来源: https://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, 整数, java.io.OutputStream)
您需要通知画廊添加了带有路径的新图像,或者我应该说您必须更新 MediaStore,以便将其作为新图像添加到 Media Store
private void addImageGallery( File file ) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); // setar isso
getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}