Frage

Ich bin mit dieser Kamera Code, um die Kamera zu bitten, die aufgenommenen Bilddaten zu drehen:

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

Dies scheint zu funktionieren auf allen Telefonen, mit Ausnahme des Droid. Hat jemand gesehen? Die Bilddaten werden immer Landschaft, aber der native Kamera-App auf dem Droid produziert ok Porträtbilder.

Ich frage mich, ob das Droid wird nur die neue Camera.Parameters.setRotation() Methode respektieren, aber dies scheint nur in API-Level 5 verfügbar sein?

War es hilfreich?

Lösung

Die Drehung kann nur im JPEG-EXIF-Header gespeichert werden, wie in dem setRotation Dokument erläutert. Auf Droid, das ist tatsächlich der Fall. Sie können JPEG-Header Lese-Tools wie jhead verwenden, um dies zu überprüfen. Sie können auch die Verwendung ExifInterface API die Orientierung Tag zu lesen, in Ihrem Programm.

Andere Tipps

setRotation schien auch nicht Arbeit für mich auf dem Nexus One, aber ich habe Bildrotation an der Arbeit nach dem Vorbild des Android-Kamera-App selbst.
Der Quellcode ist hier verfügbar: https://android.googlesource.com/platform/packages/apps/Camera

Beginnen Sie mit dem Camera.java, aber Sie werden auch bei ImageManager.java, Util.java und anderen Dateien suchen werden.

Die Grundidee ist, hören Sie zur Orientierung Änderungen und capture, was die Orientierung an der Zeit ist, dass Sie das Bild scharf. Dann, wenn Sie das Bild in dem Rückruf erhalten Bytes, manipulieren Sie die Bitmap, eine Drehung auf dem Bitmap zu tun. Dann konvertiert das gedrehte Bitmap zurück auf JPEG. Wenn Sie fertig sind, haben Sie haben eine erschreckende Menge von Code aus dem Kamera-App nur für diese Rotation zu kopieren.

Die Droid läuft Android 2.0 (gut, jetzt 2.0.1), die API-Stufe 5 und 6 sind jeweils.

So ist es durchaus möglich ist, dass das Droid nur respektiert den (sinnvoller) 2.0+ API zur Rotation.

Aber ich denke, Ihr Anliegen ist die Kompatibilität über eine Reihe von Gerätetypen und Betriebssystem-Versionen, so dass ich vorstellen, dass Sie die 2.0+ API über Reflexion nach Erfassung der OS-Version (mit android.os.Build.VERSION_CODES) aufrufen müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top