Устройство Droid – не поворачивает изображение, снятое с камеры?(Камера.Параметры)

StackOverflow https://stackoverflow.com/questions/1934378

  •  20-09-2019
  •  | 
  •  

Вопрос

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

Camera.Parameters params = camera.getParameters();
params.set("rotation", 90);
camera.setParameters(params);

Кажется, это работает на всех телефонах, кроме Droid.Кто-нибудь еще видел это?Данные изображения всегда ландшафтные, однако встроенное приложение камеры на Droid создает портретные изображения нормально.

Интересно, будет ли Дроид только уважать новое? Camera.Parameters.setRotation() метод, но, похоже, он доступен только на уровне API 5?

Это было полезно?

Решение

Поворот можно просто сохранить в заголовке exif jpeg, как описано в документе setRotation.На Дроиде это действительно так.Чтобы убедиться в этом, вы можете использовать инструменты чтения заголовков jpeg, такие как jhead.Вы также можете использовать ExifИнтерфейс API чтобы прочитать тег ориентации в вашей программе.

Другие советы

setRotation у меня также не сработало на Nexus One, но я заставил работать вращение изображения, следуя примеру самого приложения Android Camera.
Исходный код доступен здесь:https://android.googlesource.com/platform/packages/apps/Camera

Начните с файла Camera.java, но вы также будете просматривать файлы ImageManager.java, Util.java и другие.

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

Дроид работает под управлением Android 2.0 (ну, теперь 2.0.1) с уровнями API 5 и 6 соответственно.

Так что вполне возможно, что Droid уважает только (более разумный) API 2.0+ для ротации.

Однако я предполагаю, что вас беспокоит совместимость различных типов устройств и версий ОС, поэтому я предполагаю, что вам придется вызвать API версии 2.0+ посредством отражения после определения версии ОС (используя android.os.Build.VERSION_CODES).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top