简体   繁体   English

从相机 Intent 检索图像 URI 并将图像设置为 Imageview

[英]Retrieve Image URI from camera Intent and set the Image to Imageview

I am Trying to Retrieve Image URI and set the Image to Imageview...But everytime I Try , A Black Image Appears on the Image View....我正在尝试检索图像 URI 并将图像设置为 Imageview...但每次我尝试时,图像视图上都会出现黑色图像....

Below is My Code :-以下是我的代码:-

// CAMERA INTENT // 相机意图

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

startActivityForResult(i, request);

getting Data From Camera Intent从相机意图获取数据

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);
    }

How can Solve This....Pls Help如何解决这个问题....请帮助

Delete everything in your second code listing.删除第二个代码清单中的所有内容。

In onActivityResult() , load the image from mImageCaptureUri .onActivityResult() ,从mImageCaptureUri加载图像。 That is where you told the camera app to save the image.这就是您告诉相机应用程序保存图像的地方。

Hello use below code:-您好,请使用以下代码:-

intent to open camera:-意图打开相机:-

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);

Code in ActivtyResult function:- ActivtyResult 函数中的代码:-

if(requestCode==1) {

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

function to get real path of image:-获取图像真实路径的函数:-

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();
                }
            }

And Declare following permissions in manifest file:-并在清单文件中声明以下权限:-

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

Try this solution试试这个解决方案

PUT THESE PERMISSIONS IN MANIFEST将这些权限放在清单中

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-feature android:name="android.hardware.camera" android:required="true" />

INTENT TO CAPTURE IMAGE意图捕捉图像

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }

GET CAPTURED IMAGE获取捕获的图像

@Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                    Bundle extras = data.getExtras();
                    Bitmap imageBitmap = (Bitmap) extras.get("data");

                    Imview.setImageBitmap(imageBitmap);

                    // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
                    Uri tempUri = getImageUri(getApplicationContext(), imageBitmap);

                    //DO SOMETHING WITH URI

                }
            }

METHOD TO GET IMAGE URI获取图像URI的方法

public Uri getImageUri(Context inContext, Bitmap inImage) {
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
                return Uri.parse(path);
}

Below is what I've used and it works.以下是我使用过的并且有效。 You may like to try if you are still looking for a solution.如果您仍在寻找解决方案,您可能想尝试一下。

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);
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM