来自URI的Android位图

时间:2015-01-26 21:17:41

标签: android android-intent bitmap android-camera

我拍摄照片并将结果保存在文件中。生成的照片存在,我可以用文件管理器打开它。但是,我无法将该文件转换为有效的位图。我尝试了不同的方法,包括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()

中创建mImageUri
try {
        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

1 个答案:

答案 0 :(得分:1)

也许已经晚了但我用" bitmap = BitmapFactory.decodeFile(uri)修复了我的问题;" 疯狂的是,我没有必要把文件放在"文件://" bcos BitmapFactory接受直接方式" / storage / emulated /dom/bla.jpeg"

在我尝试使用之前:
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),Uri.parse(uri));

但是没有用......