Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java resolveUri在相机上的错误位图uri上失败_Java_Android_Bitmap_Camera_Uri - Fatal编程技术网

Java resolveUri在相机上的错误位图uri上失败

Java resolveUri在相机上的错误位图uri上失败,java,android,bitmap,camera,uri,Java,Android,Bitmap,Camera,Uri,我在尝试从相机和图像选择器创建位图时遇到问题 我使用了一个代码,通过摄像头创建了一个Uri,所以我在函数中添加了一个条件,该条件已经从gallery加载了图片。 以下是onActivityResult: protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, dat

我在尝试从相机和图像选择器创建位图时遇到问题

我使用了一个代码,通过摄像头创建了一个Uri,所以我在函数中添加了一个条件,该条件已经从gallery加载了图片。 以下是onActivityResult:

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE || requestCode == RESULT_CAMERA) {
            Uri selectedImage = null;
            if(requestCode == RESULT_LOAD_IMAGE)
            {
                selectedImage = data.getData();
            }
            else if(requestCode == RESULT_CAMERA)
            {
                selectedImage = imageUri;
            }
            if(resultCode == RESULT_OK && null != data) {

                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                imgViewScan.setImageURI(selectedImage);
                try {
                    InputStream stream = getContentResolver().openInputStream(
                            selectedImage);
                    bitmapLoaded = BitmapFactory.decodeStream(stream);
                } catch (IOException e) {
                    Log.e("ScanAc", e.toString());
                }
            }


        }
    }
这是摄像机的镜头:

View.OnClickListener takePicture = new View.OnClickListener() {
    public void onClick(View v) {

        String fileName = "new-photo-name.jpg";
        //create parameters for Intent with filename
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, fileName);
        values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");
        //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
        imageUri = getContentResolver().insert(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        //create new Intent
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
        Intent i = new Intent(
                MediaStore.ACTION_IMAGE_CAPTURE);

        startActivityForResult(i, RESULT_CAMERA);
    }
};
我想精确地说,画廊的图像选择工作完美,问题只是在相机上

 private void onClickCamera() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    if (takePictureIntent.resolveActivity(context.getPackageManager()) != null) {

        ContentValues values = new ContentValues(1);
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");
        fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        startActivityForResult(takePictureIntent, SELECT_PICTURE_CAMARA);

    } else {
        Toast.makeText(this, getString(R.string.error_no_camera), Toast.LENGTH_LONG).show();
    }

}
在您的takePicture clickListener中尝试此功能

在您的takePicture clickListener中尝试此功能


您可以尝试创建如下所示的临时文件。 在一个不明确的事件中

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
对于onActivityResult

File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions);

您可以尝试创建如下所示的临时文件。 在一个不明确的事件中

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
对于onActivityResult

File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions);

这解决了问题,但我并没有完全按照自己的意愿去做。我还想将ImageURI转换为位图,当我选择edimage=ImageURI时,它会创建一个具有良好值的URI,但即使保存了pic,它也不会转换为位图。我想这是因为我在onActivityResult中的条件是“if resultCode==RESULT\u OK”,但我真的不知道这可能是你的问题解决了,这解决了问题,但我没有完全按照我想要的做。我还想将ImageURI转换为位图,当我选择edimage=ImageURI时,它会创建一个具有良好值的URI,但即使保存了pic,它也不会转换为位图。我想这是因为我在onActivityResult中的条件是“if resultCode==RESULT\u OK”,但我真的不知道这可能是您的问题解决了