Intereting Posts
Вызовите (и получите ответ) код USSD в фоновом режиме? Установить подсказку поиска динамически Android firebase 9.0.0 setValue для сериализации перечислений Пропорциональное масштабирование Android VideoView Как вызвать startactivity или вызвать намерение из события onitemclick списка в фрагменте? Android: FATAL EXCEPTION: AdWorker # 1 java.lang.NoSuchMethodError: java.io.IOException. <Init> Не удалось разрешить все зависимости для конфигурации: _armv7DebugCompile ' Метод FitnessActivities.getName (int i) устарел, какой метод использовать вместо этого? Файлы расширения Apk – Лицензирование приложений – Учетная запись разработчика – NOT_LICENSED ответ Ошибки сборки Gradle после обновления Android Studio Как получить IP_ADDRESS в формате IPV4 Gradle: принудительное использование репозитория для зависимости Разрешить Dropbox API для доступа к моей учетной записи на устройстве пользователя. Как использовать MapView в android с помощью google map V2? Где появилась кнопка «Создать AndroidManifest.xml» в Qt Creator 3.3.0?

Правильно ли зарегистрирована CameraInfo.orientation от Android? Неправильно реализовано?

В Android вы можете получить описание свойств Camera , извлекая CameraInfo . Меня интересует ориентация, как описано в http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html#orientation

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

В частности, в документации говорится:

Значение – это угол, по которому изображение камеры должно поворачиваться по часовой стрелке, чтобы оно отображалось правильно на дисплее в естественной ориентации. … Например, предположим, что устройство имеет естественный высокий экран. Обратный датчик камеры монтируется в ландшафтном режиме. Вы смотрите на экран. Если верхняя сторона датчика камеры выровнена с правым краем экрана в естественной ориентации, значение должно быть 90. Если верхняя сторона датчика передней панели камеры выровнена с правой стороны экрана, значение должно 270.

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

По крайней мере, все четыре моих устройства сообщают «90» для этого значения, и все действуют так, как будто верх камеры является правой стороной устройства, когда он находится в естественной ориентации. То есть изображение должно поворачиваться на 270 градусов по часовой стрелке, а не на 90, чтобы соответствовать естественной ориентации. Пример кажется правильным; В первой строке нет.

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

Как ни странно, у меня есть данные журналов с устройства одного пользователя, которое показывает, что оно сообщает это значение как 90 раз, а 0 в другое время! Это должно быть физическое свойство того, как камера сидит в устройстве, верно?

  1. Может ли кто-нибудь подтвердить, что первая строка документации на самом деле неверна, и пример верен?
  2. Кто-нибудь заметил изменение значения CameraInfo.orientation ? Есть ли доказательства в документах, что это юридическое поведение, или это, вероятно, ошибка в устройстве?
  3. Любые другие комментарии, опыт, gotchas, с которыми я еще не сталкивался?

Solutions Collecting From Web of "Правильно ли зарегистрирована CameraInfo.orientation от Android? Неправильно реализовано?"

1) Может ли кто-нибудь подтвердить, что первая строка документации на самом деле неверна, и пример правильный?

Вы полностью обратились к этому уже в своем ответе , спасибо за последующее объяснение!

2) Кто-нибудь заметил изменение значения CameraInfo.orientation? Есть ли доказательства в документах, что это юридическое поведение, или это, вероятно, ошибка в устройстве?

Хотя я могу легко представить, что это будет ошибкой в ​​принципе, это все равно будет довольно серьезным, затрагивая всевозможные приложения, связанные с изображениями, из-за того, что результирующая информация встраивается через EXIF ​​на фотографиях (например, другие ошибки, связанные с EXIF, на мгновение ).

Таким образом, я считаю более вероятным реальную функцию одного из этих тысяч устройств Android, например, камеры с возможностью физического поворота объектива. Хотя в настоящее время я не знаком с Android на базе Android, такие телефоны были доступны, например, LG VX7000 (~ 2004) или Samsung SCH-a930 (~ 2006) (см., Например, « Вращающиеся объективы камеры» в руководстве ) Поэтому я не удивлюсь, если что-то подобное появится в сфере Android.

Кстати, есть неотвеченный вопрос. Почему мои картинки перевернуты или назад. В рамках вопросов и ответов клиентов для Samsung SCH-A930 относительно последних:

В последнее время мои фото были перевернуты или назад. Почему это происходит и как я могу это исправить.

На самом деле это может быть ошибкой в ​​других функциях аппаратной / прошивки для настройки вращения;)

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

По-моему, я ответил на свой вопрос здесь, подумав.

Пример верный. И текст на самом деле правильный. В данном примере, если данные предварительного просмотра отображаются на экране, он будет поворачиваться на 90 градусов против часовой стрелки, так как «вверх» в данных находится на правой стороне дисплея, и он отображается на дисплее, чья «вверх» «Так говорит левая рука данных. Таким образом, необходимо будет компенсировать вращением данных изображения на 90 градусов по часовой стрелке перед отображением.

Я думаю, что более естественно понимать эту цифру как поворот, на котором камера установлена ​​относительно естественной ориентации.

По этим причинам и другим я пришел к выводу, что устройство, которое показывает изменяющееся значение для ориентации, просто глючит. По крайней мере, когда он сообщает 0, его данные действуют как «90» – это правильное значение.

Другой способ справиться с проблемой состоит в том, чтобы расширить OrientationEventListener и переопределить метод onOrientationChanged, вы получите ориентацию вашего телефона, даже если авторотат отключен (потому что слушатель испускает событие поворота через датчик).

Вы должны включить и отключить прослушиватель ориентации onResume / onPause, чтобы предотвратить утечку аккумулятора.

  private class OnOrientationChange extends OrientationEventListener { private boolean isEnabled = false; public OnOrientationChange(Context context) { super(context); disable(); } @Override public void onOrientationChanged(int orientation) { if (camera != null && orientation != ORIENTATION_UNKNOWN) { int newOutputOrientation = getCameraPictureRotation(orientation); if (newOutputOrientation != outputOrientation) { outputOrientation = newOutputOrientation; Camera.Parameters params = camera.getParameters(); params.setRotation(outputOrientation); try { camera.setParameters(params); lastPictureOrientation = outputOrientation; } catch (Exception e) { Log.e(getClass().getSimpleName(), "Exception updating camera parameters in orientation change", e); // TODO: get this info out to hosting app } } } } @Override public void enable() { isEnabled = true; super.enable(); } @Override public void disable() { isEnabled = false; super.disable(); } boolean isEnabled() { return (isEnabled); } } 

Спасибо за обычное решение для решения