1

Ich möchte mein Bild von der Frontkamera spiegeln, bevor Sie es auf der SD-Karte speichern. Die Sache ist auf einigen Geräten wie Sony Xperia Z5 dreht es das Bild mit 90 Grad sowie nach dem Spiegeln. Ich kann das ExifInterface nicht verwenden, um die Ausrichtung zu erhalten, da es einen Dateipfad erfordert und in meinem Fall habe ich es noch nicht gespeichert.Frontkamera - Spiegeln und richtig drehen vor dem Speichern

Gibt es eine Chance, die Ausrichtung der spezifischen Geräte zu bekommen, damit ich sie richtig drehen kann?

Vorbelegung:

  • Camera2 Api
  • allein Porträt Bilder
+0

haben Sie eine Lösung gefunden, ich bin vor dem gleichen Problem,. ( – Andrea

Antwort

1

In Ihrem captureBuilder haben Sie einen Parameter, der die "Ausrichtung" des Bildes zu setzen, bevor es taked ist: CaptureRequest.JPEG_ORIENTATION

Android Developer website say:

Die Ausrichtung für ein JPEG-Bild.

Der Drehwinkel im Uhrzeigersinn relativ zur Ausrichtung an der Kamera, um den das JPEG-Bild gedreht werden muss, wird aufrecht angezeigt.

Kamerageräte können diesen Wert entweder in den JPEG EXIF-Header kodieren oder die Bilddaten entsprechend dieser Ausrichtung drehen. Wenn das Bild Daten gedreht wird, werden die Miniaturbilddaten ebenfalls gedreht.

Beachten Sie, dass diese Ausrichtung relativ zur Ausrichtung des Kamerasensors von android.sensor.orientation ist.

Sie können diesen Parameter in Ihrem CaptureBuilder gesetzt:

//To get the right orientation we must to get it in base of the sensor position. 
mSensorOrientation = getSensorOrientation(); 
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, mSensorOrientation); 

Holen Sie sich Ihre Sensorausrichtung von Ihrem CameraCharacteristics, die Sie von CameraManager bekommen:

public int getSensorOrientation() throws CameraAccessException { 
    return mCameraManager.getCameraCharacteristics(mCameraId).get(
      CameraCharacteristics.SENSOR_ORIENTATION); 
} 

Hoffnung, dass es Ihnen helfen wird, !

EDIT: Ich lege Ihnen eine Methode, die ich vor langer Zeit gefunden habe, um die "echte" Ausrichtung für ein Bild zu erhalten, abhängig davon, ob Sie Frontkamera sind, die Ausrichtung der Sensorvorrichtung und die Ausrichtung, die Sie erhalten möchten für dein Bild.

public static int sensorToDeviceRotation(boolean mirror, int deviceOrientation, int sensorOrientation) { 

    // Reverse device orientation for front-facing cameras 
    if (mirror) { 
     deviceOrientation = -deviceOrientation; 
    } 
    // Calculate desired JPEG orientation relative to camera orientation to make 
    // the image upright relative to the device orientation 
    return (sensorOrientation + deviceOrientation + 360) % 360; 
} 
+0

thnx für Ihre Antwort Die Sache ist, dass ich die gleichen Rotationen von den verschiedenen Geräten bekommen sie sind beide 270 mit der Frontkamera.. aber nur ein Gerät fügt eine 90 Grad zum Bild nach dem Hinzufügen der Spiegel-Matrix zu der Bitmap :( – Maxi

+0

überprüfen Sie die letzte Bearbeitung, vielleicht hilft es Ihnen –

+0

haben Sie es behoben? –