当我在我的应用程序中使用相机功能拍照时,即使相机预览分辨率很高,它也会返回低分辨率图像。我调用代码的代码是:
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);
答案 0 :(得分:1)
因为(Bitmap) data.getExtras().get("data");
会返回thumbnail
(低分辨率)图片
解决方案:
您需要使用URI
机制(图像文件的路径)并查询MediaProvider
以获取完整分辨率图像
答案 1 :(得分:0)
使用ACTION_IMAGE_CAPTURE启动相机,将始终使用已保存在相机上的相机设置,例如,如果相机设置为低分辨率(用户的配置,使用其他相机应用程序..),即使您指定你会得到低分辨率的uri。
所以你有两个选择:
答案 2 :(得分:0)
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;
}