Android 前摄像头-保存前正确镜像和旋转

Android 前摄像头-保存前正确镜像和旋转,android,android-camera,android-orientation,device-orientation,android-camera2,Android,Android Camera,Android Orientation,Device Orientation,Android Camera2,我想在将前摄像头的图像保存到sd卡之前镜像它。在一些设备上,比如索尼Xperia Z5,镜像后图像也会旋转90度。 我不能使用ExiFinInterface来获取方向,因为它需要一个文件路径,在我的情况下,我还没有保存它 是否有机会获得特定设备的方向,以便我可以正确旋转它们 预设: Camera2 Api 只有肖像画 在captureBuilder中,您有一个参数可以在拍摄图像之前设置图像的“方向”:CaptureRequest.JPEG\u方向 JPEG图像的方向 相对于方向的顺时针旋转角

我想在将前摄像头的图像保存到sd卡之前镜像它。在一些设备上,比如索尼Xperia Z5,镜像后图像也会旋转90度。 我不能使用ExiFinInterface来获取方向,因为它需要一个文件路径,在我的情况下,我还没有保存它

是否有机会获得特定设备的方向,以便我可以正确旋转它们

预设:

  • Camera2 Api
  • 只有肖像画

在captureBuilder中,您有一个参数可以在拍摄图像之前设置图像的“方向”:
CaptureRequest.JPEG\u方向

JPEG图像的方向

相对于方向的顺时针旋转角度(以度为单位) 对于相机,JPEG图片需要旋转 竖着看

相机设备可以将该值编码到JPEG EXIF头中, 或旋转图像数据以匹配此方向。当图像 旋转数据时,缩略图数据也将旋转

请注意,此方向是相对于 摄像头传感器,由android.sensor.orientation提供

您可以在CaptureBuilder中设置此参数:

 //To get the right orientation we must to get it in base of the sensor position.
 mSensorOrientation = getSensorOrientation();
 captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, mSensorOrientation);
从您的CameraCharacteristics获取传感器方向,您可以从CameraManager获取:

 public int getSensorOrientation() throws CameraAccessException {
    return mCameraManager.getCameraCharacteristics(mCameraId).get(
            CameraCharacteristics.SENSOR_ORIENTATION);
}
希望它能帮助你

编辑: 我附上了一个方法,我很久以前就发现了这个方法,可以获得照片的“真实”方向,这取决于你是否在前置摄像头中,传感器设备的方向以及你想要得到的照片的方向

   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;
}

谢谢你的回复。问题是我从不同的设备得到相同的旋转。他们都是270与前摄像头。但只有一台设备在将镜像矩阵添加到位图后向图像添加90度角:(什么是设备方向?纵向方向是什么?snesor方向是您手机传感器方向的位置。您可以从摄像头特性中获取。设备方向是拍摄照片时设备的方向(0,90180270)。在您的情况下,纵向方向应为0(或者如果你把手机换了180次)你找到解决办法了吗,我也面临同样的问题(