从相机获取完整质量的图像

3

当我使用相机拍照后,想要在ImageView中显示这张图片时,我按照如下方法进行:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO_REQUEST_FRAG);

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case PICK_IMAGE_REQUEST_FRAG:
            if (resultCode == getActivity().RESULT_OK && data != null) {

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

                ... (process image to scale size and rotate if necesary)

                pic_view.setImageBitmap(srcBmp);
            }
    }
}

我成功获取了图片并在ImageView中正确显示了它,但是我意识到所获得的图片质量很低。经过一些研究,我发现使用这种方法获得的图像是所拍摄图像的缩略图。因此,我根据其他SO帖子提供的指示修改了代码:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "Pictures/timeStamp.jpg";
takenPicUri = Uri.fromFile(new File(imageFilePath));
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, takenPicUri);
startActivityForResult(intent, TAKE_PHOTO_REQUEST_FRAG);

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case PICK_IMAGE_REQUEST_FRAG:
            if (resultCode == getActivity().RESULT_OK && data != null) {

                Bitmap srcBmp = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri), null, null);

                ... (process image to scale size and rotate if necesary)

                pic_view.setImageBitmap(srcBmp);
            }
    }
}

但是现在,图片没有在ImageView(pic_view)中显示。在其他帖子中,我读到有人报告说这种方法对他们有效,但对我来说不起作用。我是忘记了什么还是做错了什么?


这段代码会返回低质量的图像。 - Pablo Escobar
1个回答

2

嗯,我曾经在旧帖子中读到过这种做法可能会引起问题,因为与之相关的某些bug,但这是我唯一实现其工作的方法。

就像这样简单:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO_REQUEST_FRAG);

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case PICK_IMAGE_REQUEST_FRAG:
            if (resultCode == getActivity().RESULT_OK && data != null) {

                Uri selectedImageUri = data.getData();
                Bitmap srcBmp = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri), null, null);

                ... (process image to scale size and rotate if necesary)

                pic_view.setImageBitmap(srcBmp);
            }
    }
}

这种方法适用于Android 5.0和4.4.4。

1
那么4.4.4版本之前的设备呢? - Hirak Chhatbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接