То, что я делаю, похоже, должно быть простым, но я все еще теряюсь после того, как прочитал каждый возможный ответ Stackoverflow, который я могу найти, и Googled каждую статью, которую я могу найти.
Я использую предварительный просмотр SurfaceView и захват изображения из действия, которое задано для screenOrientation = "landscape" в моем AndroidManifest.xml.
Я следил за образцом кода камеры и думал, что все работает до тех пор, пока я не попробовал свое приложение на нескольких устройствах Motorola, работающих под управлением 1.5.
У меня есть OrientationEventListener, работающий нормально, и я использую отражение, чтобы увидеть, задано ли вращение как таковое:
final int latchedOrientation = roundOrientation(mLastOrientation + 90);
Parameters parameters = preview.camera.getParameters();
JPLog.d("Setting camera rotation = %d", latchedOrientation);
try {
// if >= 2.0
Method method = Camera.Parameters.class.getMethod("setRotation",
int.class);
if(method != null) {
method.invoke(parameters, latchedOrientation);
}
} catch(Throwable t) {
// if < 2.0
parameters.set("rotation", latchedOrientation);
}
preview.camera.setParameters(parameters);
NexusOne (OS 2.2) - отлично работает. lathedOrientation = 0, изображение ОК без какого-либо вращения в заголовке EXIF.
T-Mobile G1 (OS 1.6) - также отлично работает. lathedOrientation = 0, изображение ОК.
Motorola Backflip (OS 1.5). Изображение повернуто. latchedOrientation = 0, изображение не имеет вращения EXIF.
Motorola CLIQ (OS 1.5). Изображение повернуто. latchedOrientation = 0, изображение не имеет вращения EXIF.
Что происходит с этими устройствами Motorola? Я думал, что моя проблема заключается в том, что драйвер камеры Motorola не вращает изображения, поэтому нашел классы чтения Sanselan EXIF для Android и готов был сам повернуть их. Смешно, что есть EXIF-заголовки, но нет элемента вращения.
Если я установил поворот вручную на 90 градусов, изображения получились превосходными устройствами Motorola, но теперь у G1 и NexusOne есть изображения, которые поворачиваются на 90 градусов (не то, что я хочу). Должно быть кое-что, что я не получаю здесь.
Я сомневаюсь, что это проблема 1.5, иначе кто-то разместил бы информацию об этом?