【问题标题】:Get bitmap from camera android从相机android获取位图
【发布时间】:2020-06-30 19:58:04
【问题描述】:

我正在尝试从我的应用程序中打开相机并获取位图。但这不起作用。我收到了这个错误: E/BitmapFactory:无法解码流:java.io.FileNotFoundException:内容:/media/external/images/media/9969:打开失败:ENOENT(没有这样的文件或目录)

代码如下:

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

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

【问题讨论】:

    标签: android android-intent bitmap camera uri


    【解决方案1】:

    理想情况下,您将使用 Glide、Picasso 或其他图像加载库,只需让它将图像从 Uri 加载到您的 ImageView

    如果你坚持使用你的基本方法,尽管它的性能很差,替换:

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

    与:

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

    Uri 不是文件。

    【讨论】:

    • 我不想将它加载到 imageView,我想保存位图,imageview.seturi(...) 等只是一个例子你的代码不起作用它说“decodefile位图工厂中的 (java.lang.string) 无法应用于 java.io.inputstream"
    • @ImNeos:“我不想将其加载到 imageView”——您的代码显示您将其加载到 ImageView。 “你的代码不起作用”——抱歉,我忘了在 BitmapFactory 上切换方法。现在已经编辑了。使用decodeStream(),而不是decodeFile()
    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    相关资源
    最近更新 更多