Android 拍照后方向旋转问题
2019-11-15 本文已影响0人
花艺荣
- 假定为 横屏应用 ,这时无需设定Camera预览时的 display orientation,当手持为横屏时(home键在右侧)无需旋转,其它手持方向都需要旋转数据。
屏幕方向.jpg
- 获取屏幕方向:
- 获取设备角度
mOrientationListener = new OrientationEventListener(getApplicationContext(), SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
mOrientation = orientation;
}
};
try {
mOrientationListener.enable();
} catch (Exception e) {
log(e.toString());
}
- 根据设备角度计算出屏幕方向
public static ScreenOrientation getCameraDeviceOritation(int orientation){
ScreenOrientation newOrientation = ScreenOrientation.LANDSCAPE;
if (orientation >= 45 && orientation < 135)
{
newOrientation = ScreenOrientation.REVERSED_LANDSCAPE;
}
else if (orientation >= 135 && orientation < 225)
{
newOrientation = ScreenOrientation.REVERSED_PORTRAIT;
}
else if (orientation >= 225 && orientation < 315)
{
newOrientation = ScreenOrientation.LANDSCAPE;
}else if((orientation >= 315 && orientation<=360) || (orientation>=0&&orientation < 45))
{
newOrientation = ScreenOrientation.PORTRAIT;
}
return newOrientation;
}
- 根据屏幕角度旋转
- 旋转
if (!frontCam) { if (ortation == ScreenOrientation.LANDSCAPE) bitmapRotated = gBmp; if (ortation == ScreenOrientation.PORTRAIT) bitmapRotated = CameraUtils.rotaingImageView(90, gBmp); if(ortation == ScreenOrientation.REVERSED_PORTRAIT) bitmapRotated = CameraUtils.rotaingImageView(-90, gBmp); if (ortation == ScreenOrientation.REVERSED_LANDSCAPE) bitmapRotated = CameraUtils.rotaingImageView(180, gBmp); } else { if (ortation == ScreenOrientation.LANDSCAPE) bitmapRotated = gBmp; if (ortation == ScreenOrientation.PORTRAIT) bitmapRotated = CameraUtils.rotaingImageView(270, gBmp); if (ortation == ScreenOrientation.REVERSED_PORTRAIT) bitmapRotated = CameraUtils.rotaingImageView(90, gBmp); if (ortation == ScreenOrientation.REVERSED_LANDSCAPE) bitmapRotated = CameraUtils.rotaingImageView(180, gBmp); } public static Bitmap rotaingImageView(int angle, Bitmap bitmap) { //旋转图片 动作 Matrix matrix = new Matrix(); ; matrix.postRotate(angle); // 创建新的图片 Bitmap resizedBitmap = null; try{ resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); }catch (Exception e){ e.printStackTrace(); } return resizedBitmap; }