无法从相机获得高质量的位图

时间:2016-09-18 23:54:27

标签: android android-intent bitmap camera

我需要从相机获取拍摄的照片,但似乎是这段代码:

Intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri);

阻止活动转到onActivityResult并抛出这样的异常:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity

这就是我从5个小时的搜索中发现的。

这是我的代码: 意图

File mediaStorageDir = new File(Environment.getExternalStorageDirectory() + "/Files");
String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());
String mImageName = "MI_" + timeStamp + ".jpg";
File mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
imageUri = Uri.fromFile(mediaFile);
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri);
filePath = imageUri.getPath();
Log.e("000", filePath + " :|");
startActivityForResult(cameraIntent, 0);

在日志行我得到路径但是当我按相机应用程序保存时我得到错误并且为空filePath

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
appPanel.setBitmap(bitmap);

此代码很好,但返回的是低质量图像:

Bitmap thumbnail = (Bitmap) data.getExtras().get("data");

最后我找到了解决方案:

我们必须将路径保存在onSaveInstanceState,如下所示:

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);

CharSequence userText = CapturedPath;
outState.putCharSequence("savedText", userText);
}

并将其带回onRestoreInstanceState

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);

CapturedPath =savedInstanceState.getCharSequence("savedText").toString();

//Load bitamp from here:
Bitmap bitmap = BitmapFactory.decodeFile(CapturedPath);
appPanel.setBitmap(bitmap);

}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,设备相机应用程序有时不会返回任何关于ActivityResult()的数据。 它尤其是操作系统依赖项。

我的要点如下。希望这可以帮到你一点点。

CameraManager

答案 1 :(得分:-1)

经过一些研究后我发现了这个

如果您有相机对象,请尝试:

android.hardware.Camera.Parameters parameters = camera.getParameters();
android.hardware.Camera.Size size = parameters.getPictureSize();


int height = size.height;
int width = size.width;

分辨率是指图像中的像素数。有时通过图像的宽度和高度以及图像中的像素总数来确定分辨率。例如,宽2048像素,高1536像素(2048X1536)的图像包含(乘)3,145,728像素(或3.1百万像素)。您可以将其称为2048X1536或310万像素图像。随着相机中拾音设备中的百万像素增加,您可以生成的最大尺寸图像也会增加。这意味着500万像素的摄像头能够拍摄比300万像素摄像头更大的图像。

示例:1936 x 1552/1024000 = 3百万像素