首页 > 解决方案 > 从相机android获取位图

问题描述

我正在尝试从我的应用程序中打开相机并获取位图。但这不起作用。我收到此错误: E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: content:/media/external/images/media/9969: open failed: ENOENT (No such file or directory)

这是代码:

 private void openCamera()
{
    ContentValues contentValues = new ContentValues();
    contentValues.put(MediaStore.Images.Media.TITLE, "New Picture");
    contentValues.put(MediaStore.Images.Media.DESCRIPTION, "From the camera");
    image_uri =     getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);


    //Camera intent

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
    startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);




}

当我调用 openCamera() 时,这是活动结果:

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

    switch (resultCode)
            {
                case RESULT_OK :
                {

                    //imageView.setImageURI(image_uri); this works

                    Bitmap bitmap = null;
                    String photoPath = image_uri.toString();
                    bitmap = BitmapFactory.decodeFile(photoPath);

                    imageView.setImageBitmap(bitmap); //this doesnt work ! --> the bitmap is empty



                    }

                    //finish
                case RESULT_CANCELED :
                {
          //  finish();
        }
        default: {
            //finish();
        }
    }

之后我需要位图来存储图像。这很奇怪,因为图像很好地保存在画廊中,但我无法得到它......

标签: androidandroid-intentbitmapcamerauri

解决方案


理想情况下,您将使用 Glide、Picasso 或其他图像加载库,只需让它将图像UriImageView.

如果您坚持使用基本方法,尽管性能不佳,请替换:

String photoPath = image_uri.toString();
bitmap = BitmapFactory.decodeFile(photoPath);

和:

bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(image_uri));

AUri不是文件。


推荐阅读