如何显示用户刚用相机拍摄的图像

How to display an image that the user just took with camera

我正在尝试让用户选择从 phone 的存储中选择一张图像,或者使用 phone 的相机应用程序拍摄一张,然后将该图像显示在图像视图。在 this and this 问题的帮助下,我能够在从存储中选择图像时显示图像。但是,如果我选择用相机拍照,虽然我没有收到错误,但图像不会显示在 imageView 中。

选择图片的函数如下所示:

public void choosePic(View view) {
    Intent pickIntent = new Intent();
    pickIntent.setType("image/*");
    pickIntent.setAction(Intent.ACTION_GET_CONTENT);

    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    String pickTitle = "Select or take a new Picture"; // Or get from strings.xml
    Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle);
    chooserIntent.putExtra
    (
      Intent.EXTRA_INITIAL_INTENTS, 
      new Intent[] { takePhotoIntent }
    );

    startActivityForResult(chooserIntent, SELECT_PICTURE);
}

之后由

处理
    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == PICK_IMAGE && data != null && data.getData() != null) {
        Uri _uri = data.getData();

        //User had pick an image.
        Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
        cursor.moveToFirst();

        image = (ImageView) findViewById(R.id.imageView);
        image.setImageURI(_uri);
        cursor.close();
    }
    super.onActivityResult(requestCode, resultCode, data);
}

编辑

在@Murtaza Hussain 的帮助下,我找到了可行的解决方案:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("requestCode",""+requestCode);
    if(requestCode == PICK_IMAGE && resultCode==RESULT_OK && data != null && data.getData() != null) {
        Uri _uri = data.getData();

        //User had pick an image.
        Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
        cursor.moveToFirst();

        image = (ImageView) findViewById(R.id.imageView);
        image.setImageURI(_uri);
        cursor.close();
    }
    else if(requestCode== PICK_IMAGE && resultCode==RESULT_OK && data.getData() == null){

        Bundle extras = data.getExtras();
        Bitmap thePic = extras.getParcelable("data");


        image =(ImageView) findViewById(R.id.imageView);
        image.setImageBitmap(thePic);

    }

    super.onActivityResult(requestCode, resultCode, data);
}

您需要在onActivityResult()

中为其添加代码
if(requestCode==0 && resultCode==RESULT_OK ){

    Bundle extras = data.getExtras();
    Bitmap thePic = extras.getParcelable("data");


    image =(ImageView) findViewById(R.id.imageView);
    image.setImageBitmap(thePic);

}

在您 activity 时从相机捕获图像。编写以下代码。

Intent intent    = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"/imageLarge"+System.currentTimeMillis()+".jpg"));
                intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

                try {
                    intent.putExtra("return-data", true);
                    startActivityForResult(intent, 111);
                } catch (ActivityNotFoundException e) {
                    e.printStackTrace();
                }

在 onActivityResult() 中写入以下代码..

   @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch (requestCode) {
            case 111:           

                if(resultCode == RESULT_OK)
                {
                    Log.v("","After camera capture path is --> "+mImageCaptureUri.toString().substring(8));         
                    Bitmap bitmap=BitmapFactory.decodeFile(mImageCaptureUri.toString().substring(8));
image.setImageBitmap(bitmap);

                }
                else
                {

                }
    }
    }

别忘了添加一项权限。

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

如有任何疑问,请告诉我。谢谢