Поделиться через


Camera.SetDisplayOrientation(Int32) Метод

Определение

Внимание!

deprecated

Задайте поворот по часовой стрелке предварительного просмотра в градусах.

[Android.Runtime.Register("setDisplayOrientation", "(I)V", "")]
[System.Obsolete("deprecated")]
public void SetDisplayOrientation (int degrees);
[<Android.Runtime.Register("setDisplayOrientation", "(I)V", "")>]
[<System.Obsolete("deprecated")>]
member this.SetDisplayOrientation : int -> unit

Параметры

degrees
Int32

угол, в который будет поворачиваться рисунок по часовой стрелке. Допустимые значения: 0, 90, 180 и 270.

Атрибуты

Комментарии

Задайте поворот по часовой стрелке предварительного просмотра в градусах. Это влияет на кадры предварительного просмотра и рисунок, отображаемый после моментального снимка. Этот метод полезен для приложений в книжном режиме. Обратите внимание, что предварительный просмотр передней камеры перевернут по горизонтали перед поворотом, то есть изображение отражается вдоль центральной вертикальной оси датчика камеры. Таким образом, пользователи могут видеть себя как глядя в зеркало.

Это не влияет на порядок массива байтов, передаваемых в PreviewCallback#onPreviewFrameформате JPEG или записанных видео. Этот метод не допускается вызывать во время предварительной версии.

Если вы хотите, чтобы изображение камеры отображалось в той же ориентации, что и дисплей, можно использовать следующий код.

public static void setCameraDisplayOrientation(Activity activity,
                    int cameraId, android.hardware.Camera camera) {
                android.hardware.Camera.CameraInfo info =
                        new android.hardware.Camera.CameraInfo();
                android.hardware.Camera.getCameraInfo(cameraId, info);
                int rotation = activity.getWindowManager().getDefaultDisplay()
                        .getRotation();
                int degrees = 0;
                switch (rotation) {
                    case Surface.ROTATION_0: degrees = 0; break;
                    case Surface.ROTATION_90: degrees = 90; break;
                    case Surface.ROTATION_180: degrees = 180; break;
                    case Surface.ROTATION_270: degrees = 270; break;
                }

                int result;
                if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                    result = (info.orientation + degrees) % 360;
                    result = (360 - result) % 360;  // compensate the mirror
                } else {  // back-facing
                    result = (info.orientation - degrees + 360) % 360;
                }
                camera.setDisplayOrientation(result);
            }

Начиная с уровня 14 API этот метод можно вызывать при активном просмотре.

<Примечание>. </b>До уровня API 24 значение по умолчанию для ориентации равно 0. Начиная с уровня API 24, ориентация по умолчанию будет иметь правильную ориентацию предварительной версии приложений в режиме принудительного ландшафта, что может быть по умолчанию 0 или 180. Приложения, работающие в книжном режиме или разрешающие изменение ориентации, по-прежнему должны вызывать этот метод после каждого изменения ориентации, чтобы обеспечить правильное отображение предварительного просмотра во всех случаях.

Документация по Java для android.hardware.Camera.setDisplayOrientation(int).

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Применяется к

См. также раздел