2017-01-25 79 views
0

我試圖檢索圖像URI並將圖像設置爲圖像視圖...但是每當我嘗試時,圖像視圖中都會出現黑色圖像....從相機意圖中檢索圖像URI並將圖像設置爲圖像視圖

下面是我的代碼: -

// CAMERA意向

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri); 

startActivityForResult(i, request); 

獲取數據從相機意向

Bundle extra = data.getExtras(); 
Bitmap photos =(Bitmap)extra.get("data"); 
String path=getOriginalImagePath(); 
File f = new File(path); // 
ImageURI = Uri.fromFile(f); 
showpotos.setImageURI(ImageURI); 



public String getOriginalImagePath() { 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = Profile_details.this.managedQuery(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       projection, null, null, null); 
     int column_index_data = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToLast(); 

     return cursor.getString(column_index_data); 
    } 

如何解決這個....請幫助

+1

首先,不要直接從'Uri'解碼Bitmap。你可能會陷入內存問題。相反,使用像'Glide','畢加索'等圖像加載器。 – Wizard

回答

2

刪除你的第二個代碼清單一切。

onActivityResult()中,從mImageCaptureUri加載圖片。那是你告訴相機應用程序保存圖像的地方。

+0

mImageCaptureUri返回空值。 –

+0

@AkshayDeepLamba:確保您通過配置更改(例如,通過保存的實例狀態「Bundle」)保留此值。見https://github.com/commonsguy/cw-omnibus/tree/master/Camera/FileProvider – CommonsWare

1

你好使用下面的代碼: -

意圖打開相機: - 在ActivtyResult功能

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
// Declare mUri as globel varibale in class 
mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "pic_"+ String.valueOf(System.currentTimeMillis()) + ".jpg")); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri); 
startActivityForResult(intent, 1); 

代碼: -

if(requestCode==1) { 

    image_str =getRealPathFromURI(mUri).toString(); 
    try { 
    Picasso.with(getApplicationContext()).load(mUri)into(Imageview1); 
      } catch (Exception e) { 
       e.printStackTrace(); 
          } 
        } 

函數來獲取圖像的真實路徑: -

public String getRealPathFromURI(Uri contentUri) 
      { 
       try 
       { 
        String[] proj = {MediaStore.Images.Media.DATA}; 
        Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
        System.out.println("column_index of selected image is:"+column_index); 
        cursor.moveToFirst(); 
        System.out.println("selected image path is:"+cursor.getString(column_index)); 
        return cursor.getString(column_index); 
       } 
       catch (Exception e) 
       { 
        return contentUri.getPath(); 
       } 
      } 

並聲明清單文件中的以下權限: -

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
0

下面是我用過的,它的工作原理。如果您仍在尋找解決方案,您可以嘗試嘗試。

public void takePicture(View view) { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    file = Uri.fromFile(getOutputMediaFile()); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, file); 

    startActivityForResult(intent, 100); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) { 
    if (requestCode == 100) { 
     if (resultCode == RESULT_OK) { 
      imageView.setImageURI(file); 
    } 
    } 
}