我拍摄照片并将结果保存在文件中。生成的照片存在,我可以用文件管理器打开它。但是,我无法将该文件转换为有效的位图。我尝试了不同的方法,包括BitmapFactory,但它总是返回一个空的Bitmap。
生成的URI,即mImageUri,是
file:///storage/emulated/0/Pictures/IMG_20150126_180346_1663372760.jpg
和路径
/storage/emulated/0/Pictures/IMG_20150126_180346_1663372760.jpg
代码如下。
Utils类创建新的图像文件
public static File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "IMG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
return image;
}
在onCreate()
中创建mImageUritry {
mPhotoFile = Utils.createImageFile();
mImageUri = Uri.fromFile(mPhotoFile);
} catch (IOException ex) {
Toast.makeText(this, getString(R.string.error_something_wrong_happened), Toast.LENGTH_LONG).show();
}
调用相机意图
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePhotoIntent.resolveActivity(getPackageManager()) != null && mImageUri != null) {
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(takePhotoIntent, REQUEST_CAMERA);
}
解析结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
//Unable to get Bitmap from mImageUri
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageUri);
Log.d(TAG, "bitmap exists " + bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Android版本为4.4.4
答案 0 :(得分:1)
也许已经晚了但我用" bitmap = BitmapFactory.decodeFile(uri)修复了我的问题;" 疯狂的是,我没有必要把文件放在"文件://" bcos BitmapFactory接受直接方式" / storage / emulated /dom/bla.jpeg"
在我尝试使用之前:
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),Uri.parse(uri));
但是没有用......