Как я могу определить значение поворота на изображении, снятом с помощью камеры в моем Xiaomi Redmi Note? - PullRequest
0 голосов
/ 24 сентября 2018

Я знаю, что на некоторых устройствах это нормально, что полученное изображение поворачивается, но у меня проблема в том, что я не могу получить значение поворота этих изображений, когда они сняты с устройства Xiaomi.

Это может быть связано с этим вопросом

, но я попробовал несколько предложенных решений, некоторые из них работают на других устройствах, таких как мой Sony Xperia, но ни одно из них не работаетна Xiaomi.

это некоторые из моих попыток получить значение поворота, но все они возвращают 0 в качестве значения поворота ...

public int getRotation () {
    // using camera 2 methods to get orientation
    int orientation = 0;
    int orientation2 = getWindowManager().getDefaultDisplay().getOrientation();
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    try {
        String cameraId = manager.getCameraIdList()[0];
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
        orientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
    }
    catch (Exception e){
        e.printStackTrace();
    }
    return orientation;
}

private int getImageOrientation(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.ImageColumns.ORIENTATION };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            imageColumns, null, null, imageOrderBy);

    if(cursor.moveToFirst()){
        int orientation = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION));
        cursor.close();
        return orientation;
    } else {
        return 0;
    }
}

private int getOrientationUsingExif (String photoPath) {
    ExifInterface ei = null;
    int orientationDegree = 0;
    try {
        ei = new ExifInterface(photoPath);
        int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_UNDEFINED);
        switch(orientation) {

            case ExifInterface.ORIENTATION_ROTATE_90:
                orientationDegree = 90;
                break;

            case ExifInterface.ORIENTATION_ROTATE_180:
                orientationDegree = 180;
                break;

            case ExifInterface.ORIENTATION_ROTATE_270:
                orientationDegree = 270;
                break;

            case ExifInterface.ORIENTATION_NORMAL:
            default:
                orientationDegree = 0;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return orientationDegree;
}

любая помощь будет высоко оценена.

...