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;
}
haben Sie eine Lösung gefunden, ich bin vor dem gleichen Problem,. ( – Andrea