Android 前摄像头-保存前正确镜像和旋转
我想在将前摄像头的图像保存到sd卡之前镜像它。在一些设备上,比如索尼Xperia Z5,镜像后图像也会旋转90度。 我不能使用ExiFinInterface来获取方向,因为它需要一个文件路径,在我的情况下,我还没有保存它 是否有机会获得特定设备的方向,以便我可以正确旋转它们 预设: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图像的方向 相对于方向的顺时针旋转角
- Camera2 Api
- 只有肖像画
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次)你找到解决办法了吗,我也面临同样的问题(