我在Android上制作了一个自定义相机并遇到了方向问题。 具有surfaceview的活动是纵向方向,因为这对onConfigurationChanged监听器不起作用,但我知道它。 我想始终以正常方向保存相机中的照片,但根据拍摄方向的不同,图像会以不同的方向保存。
代码:
public void onClickPicture(View view) {
camera.takePicture(null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try {
FileOutputStream fos = new FileOutputStream(photoFile);
fos.write(data);
fos.close();
Bitmap bm = BitmapFactory.decodeByteArray(data,0,data.length);
ExifInterface ei;
ei = new ExifInterface(photoFile.getAbsolutePath());
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_NORMAL:
//ALAWAYS THIS CASE
break;
case ExifInterface.ORIENTATION_ROTATE_90:
bm = rotateImage(bm, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
bm = rotateImage(bm, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
bm = rotateImage(bm, 270);
break;
}
} catch (Exception e) {
e.printStackTrace();
}
});
}
答案 0 :(得分:1)
您需要扩展OrientationEventListener并在您的活动中创建它的实例。之后,您调用此实例的enable
方法
每当设备的方向发生变化时,都会调用方法OrientationEventListener#onOrientationChanged(int)。在此方法中,您可以通过Camera.Parameters#setRotation(int)方法计算要在相机参数中设置的新旋转。