Android摄像头定位问题 [英] Android Camera Orientation ISsue

查看:121
本文介绍了Android摄像头定位问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在垂直格式拍摄的照片都保存在横向格式,反之亦然。我使用Android摄像头使用此意图

pictures taken in vertical format are saved in landscape format and vice-versa. I am using Android camera by using this intent

Intent captureImage = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
captureImage.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri);               
startActivityForResult(captureImage, CAMERA_PIC_REQUEST);

onActivityResult()我只是保存图像的URL到我的数据库,并在列表视图显示它。 但orientatiuon变化。同样会发生,如果我选择的画廊图像,并保存它。

onActivityResult() I am just saving image URL to my database and displaying it in a listview. but there orientatiuon changes. The same will happen if I choose image from gallery and save it.

我想在照片已被采取的方向。我不想去改变它。是任何人有这样的solutin。

I want the orientation in which photo has been taken. I dont want to change it. Is anybody have a solutin on this.

推荐答案

有些设备不旋转图像它被采取之后,但只写它的方位信息为Exif数据中。因此,使用拍摄的照片之前,您应该调用类似的方法:

Some devices doesn't rotate image after it was taken but just write its orientation information into Exif data. So before using taken photo you should call method like :

private int resolveBitmapOrientation(File bitmapFile) throws IOException {
        ExifInterface exif = null;
        exif = new ExifInterface(bitmapFile.getAbsolutePath());

        return exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
    }

要检查它的方向。然后应用:

to check its orientation. Then apply:

private Bitmap applyOrientation(Bitmap bitmap, int orientation) {
        int rotate = 0;
        switch (orientation) {
            case ExifInterface.ORIENTATION_ROTATE_270:
                rotate = 270;
                break;
            case ExifInterface.ORIENTATION_ROTATE_180:
                rotate = 180;
                break;
            case ExifInterface.ORIENTATION_ROTATE_90:
                rotate = 90;
                break;
            default:
                return bitmap;
        }

        int w = bitmap.getWidth();
        int h = bitmap.getHeight();
        Matrix mtx = new Matrix();
        mtx.postRotate(rotate);
        return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
    }

和使用这个新的位图在你的列表视图。或者,它甚至更好调用这个方法您的照片拍摄刚结束,并与新的旋转一周覆盖它。

and use this new bitmap in your listview. Or it's even better to call this methods just after your photo was taken and override it with new rotated one.

这篇关于Android摄像头定位问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆