2015-01-26 111 views
0

我拍摄一张照片并将结果保存在一个文件中。由此产生的照片存在,我可以用文件管理器打开它。但是,我无法将该文件转换为有效的位图。我尝试过不同的方法,包括BitmapFactory,但它总是返回一个空位图。来自URI的Android位图

得到的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

+0

当你说你有“没有运气”这是什么意思,它是否崩溃,它返回一个空位图吗? – tyczj 2015-01-26 21:31:25

+0

请更具体地发布您的结果,例外情况。 – 2015-01-26 21:37:05

+0

它返回一个空位图,正确的 – Roman 2015-01-26 21:41:08

回答

1

也许是晚了,但我解决了我的问题“位图= BitmapFactory.decodeFile(uri);” 疯狂的事情是,我不需要把“file://”bcos BitmapFactory接受直接的方式“/storage/emulated/......../bla.jpeg”

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

但没有工作....