为什么我在Android中使用应用程序拍照时得到低分辨率的照片?

时间:2017-07-27 15:01:25

标签: android camera

当我在我的应用程序中使用相机功能拍照时,即使相机预览分辨率很高,它也会返回低分辨率图像。我调用代码的代码是:

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

3 个答案:

答案 0 :(得分:1)

因为(Bitmap) data.getExtras().get("data");会返回thumbnail(低分辨率)图片

解决方案:  您需要使用URI机制(图像文件的路径)并查询MediaProvider以获取完整分辨率图像

Save the Full-size Photo

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