Устройство Droid - не будет ли вращаться изображение, снятое с камеры? (Camera.Parameters) - PullRequest
1 голос
/ 20 декабря 2009

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 14 февраля 2010

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

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

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

0 голосов
/ 20 декабря 2009

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

0 голосов
/ 20 декабря 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...