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