Ich verwende eine Vorschau, um anzuzeigen, was die Kamera auf dem Bildschirm sieht.
Ich kann alles zum Laufen bringen, die Oberfläche erstellen, die Oberfläche einstellen und die Oberfläche wird angezeigt.
Im Hochformat wird das Bild jedoch immer in einem falschen 90-Grad-Winkel angezeigt.
Wie auf dem Bild:
Mir ist bewusst, dass die Verwendung des folgenden Codes das Bild gerade macht:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Ich habe jedoch die Vorschau in einer Aktivität, die andere Elemente enthält, und es ist nicht sinnvoll, meine Aktivität im Querformat anzuzeigen. (Standardmäßig deaktiviert)
Ich habe mich also gefragt, ob es überhaupt eine Möglichkeit gibt, die Ausrichtung der Vorschau zu ändern. Und den Rest meiner Aktivität im Porträtmodus korrekt anzeigen lassen?
Oder um die Vorschau so zu drehen, dass sie korrekt angezeigt wird?
Antworten:
Dieses Problem schien als Fehler mit bestimmter Hardware zu beginnen ( siehe hier) , kann jedoch durch den Aufruf von mCamera.setDisplayOrientation (Grad) in API 8 behoben werden. So implementiere ich es:
Dies war auf einem HTC Desire und ich musste zunächst Protokollierungsanweisungen in jede der Rotationsprüfungen eingeben, um zu sagen, was die Rotation war, und dann auf dem Gerät debuggen und die logCat-Ausgabe beobachten, während ich das Gerät drehte. Für das HTC Desire war 0 das Telefon, wie Sie es erwartet hatten (Porträt), 90 Grad drehten das Telefon um 90 Grad gegen den Uhrzeigersinn (ich hatte angenommen, es wäre im Uhrzeigersinn gewesen). Im Code sehen Sie, dass ich bei 90 oder 180 Grad keine Drehung des Displays durchführen musste - das Gerät schien dies selbst zu handhaben. Nur ein Punkt funktioniert nicht richtig: Die Drehung um 270 Grad ist, wenn Sie das Gerät um 90 Grad im Uhrzeigersinn drehen und die Drehung des Displays gegenläufig ist. Wenn Sie das Gerät jedoch um 270 Grad gegen den Uhrzeigersinn drehen, scheint es dies nicht richtig zu kompensieren.
PS Beachten Sie den Wechsel von Breite und Höhe in den entsprechenden Umdrehungen.
quelle
mCamera.setParameters(parameters);
Anweisung stürzt meine App ab, weil die Oberflächenabmessungen keine gültige Vorschaugröße für mein Telefon sind (möglicherweise, weil ich die Statusleiste sichtbar halte?). Ich fand jedoch, dass die VerwendungmCamera.setDisplayOrientation(90)
dannmCamera.setPreviewDisplay(mSurfaceHolder);
ohne Einstellung der Parameter auch funktioniert!Versuchen Sie, die Ausrichtung der Anzeige einzustellen. Es löst mein Problem.
quelle
onPreviewFrame()
oderonPictureTaken()
Versuchen Sie diesen Code
quelle
Ich hatte ein Problem mit der Frontkamera (Upside-Down-Problem). Dann habe ich die folgende Methode verwendet, die in Android Docs dokumentiert ist -
quelle
Ich habe es mit Ratschlägen von mCamera.setDisplayOrientation (90) gemacht. aber auch die Bitmap gedreht, weil aus irgendeinem Grund die anderen Ansätze für mich in Version 2.3.3 nicht funktionieren.
Zum Drehen der Bitmap habe ich folgendes gemacht:
quelle
Ich habe meinen Code mit dem Tutorial verglichen und als letztes wurde der folgende Code in meine AndroidManifext.xml eingefügt: Im
<activity>
Tag:quelle
quelle
Ich denke, der SENSOR_ORIENTATION- Wert erklärt, welcher Wert für die Drehung verwendet werden soll, anstatt auf 90 Grad fest zu codieren
quelle