为什么使用摄像头拍摄的图像会在Android上的某些设备上旋转?

为什么使用摄像头拍摄的图像会在Android上的某些设备上旋转?

我正在捕捉一个图像并将其设置为图像视图。

public void captureImage() {

    Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");
    File filePhoto = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
    imageUri = Uri.fromFile(filePhoto);
    MyApplicationGlobal.imageUri = imageUri.getPath();
    intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intentCamera, TAKE_PICTURE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, 
    Intent intentFromCamera) {
    super.onActivityResult(requestCode, resultCode, intentFromCamera);

    if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) {

        if (intentFromCamera != null) {
            Bundle extras = intentFromCamera.getExtras();
            if (extras.containsKey("data")) {
                bitmap = (Bitmap) extras.get("data");
            }
            else {
                bitmap = getBitmapFromUri();
            }
        }
        else {
            bitmap = getBitmapFromUri();
        }
        // imageView.setImageBitmap(bitmap);
        imageView.setImageURI(imageUri);
    }
    else {
    }}public Bitmap getBitmapFromUri() {

    getContentResolver().notifyChange(imageUri, null);
    ContentResolver cr = getContentResolver();
    Bitmap bitmap;

    try {
        bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, imageUri);
        return bitmap;
    }
    catch (Exception e) {
        e.printStackTrace();
        return null;
    }}

但问题是,一些设备上的图像每次旋转时都会出现。例如,在三星设备上,它工作得很好,但是在一个索尼Xperia图像旋转90度东芝兴盛(药片)180度。


PIPIONE
浏览 1027回答 3
3回答

犯罪嫌疑人X

大多数手机相机都是景观,这意味着如果你在肖像中拍摄照片,所产生的照片将被旋转90度。在这种情况下,相机软件应该填充EXIF数据的方向,照片应该在其中查看。请注意,下面的解决方案取决于安装Exif数据的相机软件/设备制造商,因此它在大多数情况下都能工作,但它不是100%可靠的解决方案。ExifInterface ei = new ExifInterface(photoPath);int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,                                      ExifInterface.ORIENTATION_UNDEFINED);Bitmap rotatedBitmap = null;switch(orientation) {     case ExifInterface.ORIENTATION_ROTATE_90:         rotatedBitmap = rotateImage(bitmap, 90);         break;     case ExifInterface.ORIENTATION_ROTATE_180:         rotatedBitmap = rotateImage(bitmap, 180);         break;     case ExifInterface.ORIENTATION_ROTATE_270:         rotatedBitmap = rotateImage(bitmap, 270);         break;     case ExifInterface.ORIENTATION_NORMAL:     default:         rotatedBitmap = bitmap;}这是rotateImage方法:public static Bitmap rotateImage(Bitmap source, float angle) {     Matrix matrix = new Matrix();     matrix.postRotate(angle);     return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),                                matrix, true);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android