2015-01-26 115 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));

但沒有工作....