Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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
Android 解码相机拍摄的图像时出错_Android_Bitmap_Camera_Decoding - Fatal编程技术网

Android 解码相机拍摄的图像时出错

Android 解码相机拍摄的图像时出错,android,bitmap,camera,decoding,Android,Bitmap,Camera,Decoding,我启动相机以捕获一张图片,该图片存储在外部存储器中特定文件夹中的新文件中 问题是,当我尝试在我的onActivityResult()方法中使用BitmapFactory.decodeFile()对文件中的图像进行解码时,返回的图像是null。这是因为文件尚未完成(即相机保存图像的过程尚未完成)?我怎样才能解决这个问题 以下是我启动相机的代码: private void launchCamera() { //create folder File imagesFolder = new

我启动相机以捕获一张图片,该图片存储在外部存储器中特定文件夹中的新文件中

问题是,当我尝试在我的
onActivityResult()
方法中使用
BitmapFactory.decodeFile()
对文件中的图像进行解码时,返回的图像是
null
。这是因为文件尚未完成(即相机保存图像的过程尚未完成)?我怎样才能解决这个问题

以下是我启动相机的代码:

private void launchCamera() {
    //create folder
    File imagesFolder = new File(
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            Consts.MEDIA_EXTERNAL_FOLDER);
    if(!imagesFolder.exists())
        imagesFolder.mkdirs();
    String fileName = "pic_"+Consts.CAMERA_DATE_FORMAT.format(new Date());
    File image = null;
    try {
        image = File.createTempFile(fileName, ".jpg", imagesFolder);
    } catch(IOException e) {
        Log.e(TAG, "Error creating new file.");
    }
    capturedImageURI = Uri.parse(image.getAbsolutePath());

    //launch camera
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageURI);
    startActivityForResult(intent, CAMERA_ACTION);
}
这是当我在onActivityResult()的
中得到图像时:

我怎样才能解决这个问题


文件
,AFAIK不理解
文件://
URL格式,这是您将从
capturedImageURI.toString()获得的格式。不要重新生成
文件
,而是使用您已经创建的文件。

非常感谢。起初我认为“那不是真的,那不是uri格式”,我是对的,事实上uri.toString()的输出与file.getAbsolutePath()相同,但我尝试了一下,出于某种原因,这是可行的。现在唯一的问题是我在图库中的文件夹中看不到新图片,这意味着getContentResolver().notifyChange(capturedImageURI,null)不起作用:\@AlessandRoaro:使用
MediaScannerConnection
scanFile()
MediaStore
知道为图片编制索引。我希望camera应用程序能够做到这一点,但是有很多camera应用程序,有些可能在从第三方应用程序调用时无法做到。此外,在索引文件时可能会有延迟,更不用说通知您的
ContentObserver
,而其他工作正在设备上完成。我不知道MediaScannerConnection,再次感谢您的帮助。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {

        case CAMERA_ACTION:
            getContentResolver().notifyChange(capturedImageURI, null);
            File f = new File(capturedImageURI.toString());

            decodedBitmap = Helper.decodeSampledBitmapFromResource(filePath);
            ImageView imageView = new ImageView(this);
            imageView.setImageBitmap(decodedBitmap);

            break;
     }