2017-01-25 62 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); 
    } 
    } 
}