从图库中读取位图并将其写入 SD 卡失败
Reading Bitmap from the gallery and writing it into the sd card fails
我想将图库中的位图复制到 SD 卡上的路径中。
此功能适用于从相机拍摄的照片:
public void saveBitmap(Bitmap bitMap, Uri avatarUri) throws Exception{
File file = new File(avatarUri.toString());
// if (file.exists ()) file.delete ();
try {
OutputStream fOut = new FileOutputStream(file);
if (bitMap.compress(Bitmap.CompressFormat.PNG, 100, fOut)) {
fOut.flush();
fOut.close();
} else {
Log.d("123", "compress file");
}
} catch (Exception e) {
Log.d("123", "File not found file");
}
}
但是当我 select 使用图库中的图像时:
void getImageFromGallery(Intent data) throws FileNotFoundException {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
avatarBitmap = bitmap;
}
并使用saveBitmap()
方法保存这张选择的图片,它捕获了一个File not found
异常。
此方法为 saveBitmap()
方法生成文件夹和 returns URI。
public Uri generateAvatarImageUri(String patientName) {
Date date = new Date(0);
SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
String filename = sdf.format(date) + patientName;
return Uri.fromFile(new File(getExternalStorageDirectory(), avatarFolderPath+filename+".jpg"));
}
}
有什么帮助吗?
终于找到原因了,是因为文件路径的问题。
这是我用的:
Uri uri = ....;
path = uri.toString();
这导致前缀 file:/// 被添加到路径字符串中,例如:
file:///storage/...png
希望能帮到别人。
我想将图库中的位图复制到 SD 卡上的路径中。
此功能适用于从相机拍摄的照片:
public void saveBitmap(Bitmap bitMap, Uri avatarUri) throws Exception{
File file = new File(avatarUri.toString());
// if (file.exists ()) file.delete ();
try {
OutputStream fOut = new FileOutputStream(file);
if (bitMap.compress(Bitmap.CompressFormat.PNG, 100, fOut)) {
fOut.flush();
fOut.close();
} else {
Log.d("123", "compress file");
}
} catch (Exception e) {
Log.d("123", "File not found file");
}
}
但是当我 select 使用图库中的图像时:
void getImageFromGallery(Intent data) throws FileNotFoundException {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
avatarBitmap = bitmap;
}
并使用saveBitmap()
方法保存这张选择的图片,它捕获了一个File not found
异常。
此方法为 saveBitmap()
方法生成文件夹和 returns URI。
public Uri generateAvatarImageUri(String patientName) {
Date date = new Date(0);
SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
String filename = sdf.format(date) + patientName;
return Uri.fromFile(new File(getExternalStorageDirectory(), avatarFolderPath+filename+".jpg"));
}
}
有什么帮助吗?
终于找到原因了,是因为文件路径的问题。
这是我用的:
Uri uri = ....;
path = uri.toString();
这导致前缀 file:/// 被添加到路径字符串中,例如:
file:///storage/...png
希望能帮到别人。