我希望在将前置摄像头保存到SD卡之前对其进行镜像。事情是在索尼Xperia Z5等设备上,它在镜像后将图像旋转90度。 我不能使用ExifInterface来获取方向,因为它需要一个文件路径,在我的情况下我还没有保存它。
有没有机会获得特定设备的方向,以便我可以正确旋转它们?
预设:
答案 0 :(得分:2)
在你的captureBuilder中,你有一个参数来设置" Orientation"在拍摄之前的图像:CaptureRequest.JPEG_ORIENTATION
Android Developer website say:
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;
}