为什么我在android中使用应用程序拍照时会出现低分辨率照片?
问题描述:
当我在我的应用程序中使用相机功能拍摄照片时,即使相机预览效果良好,也会返回低分辨率图像。我调用的代码的代码是:为什么我在android中使用应用程序拍照时会出现低分辨率照片?
final Button takePicButton = (Button) findViewById(R.id.takePicButton);
takePicButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, REQUEST_CAMERA);
}
});
我对活动结果代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CAMERA && resultCode == Activity.RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);
答
因为(Bitmap) data.getExtras().get("data");
将返回一个thumbnail
(低分辨率)PIC
解决方案: 你需要使用URI
机制(路径到图像文件)并查询MediaProvider
以获取全分辨率图像
答
启动与ACTION_IMAGE_CAPTURE相机,将始终使用已保存在相机上的相机设置,例如,如果相机设置好的了低分辨率(用户的配置,使用其他相机应用的..)即使你指定了uri,你也会得到低分辨率。
所以,你有两个选择:
- 构建你自己的相机活动,并将其设置到高分辨率
- 要求用户启动捕获
答
Uri selectedImage = data.getData();
Bitmap picTaken = getBitmapFromUri(selectedImage);
之前手动设置的相机分辨率
使用此功能从URI获取图像
private Bitmap getBitmapFromUri(Uri uri) throws IOException {
ParcelFileDescriptor parcelFileDescriptor =
getActivity().getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fileDescriptor;
if (parcelFileDescriptor != null) {
fileDescriptor = parcelFileDescriptor.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
ByteArrayOutputStream out = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 50, out);
return BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
}
return null;
}
没有“来自结果的URI”。您通过'EXTRA_OUTPUT'提供'Uri',如链接到的文档所示。 – CommonsWare
需要在cameraIntent上指定uri。但即使使用ACTION_IMAGE_CAPTURE启动相机,也会始终使用已保存在相机上的相机设置,例如,如果用户使用低分辨率拍摄相机应用程序,即使指定了uri,您也会始终保持低分辨率 – sansa