我写了一个定制相机的活动来处理调用的意图拍摄时我一直有与某些Android设备的一些问题。 用户能够或者选择保存图像或只使用返回的数据从后面OnPictureTakenCallback
。
我遇到的问题是相对于它采取的正确方向显示图像。 我强迫通过调用显示在人像活动SetRequestedOrientation
。
我怎么知道正确取向的相机是当用户拿着照片吗? 即,用户可能需要在90(肖像)的旋转的图像。
我试着去使用getRotation()
的窗口管理器的默认显示上,但设置请求的方向为纵向,只有返回Surface.ROTATION_0
。
更新:为了澄清我的其他问题,我怎么能确定正好从方位byte[]
中如果用户不保存图像画面回调数据?
更新:此代码尝试下面的答案,毕竟我得到的是ExifInterface.ORIENTATION_NORMAL。 我也改变了我的代码,以只保存在相机返回我不知道有一个简单的方法来确定只具有定向文件byte[]
数据。
private PictureCallback mPicture = new PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
File directory = new File(android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_PICTURES),
"MyApp");
if(!directory.exists())
{
if(!directory.mkdirs())
{
Log.d("CAMERA", "Unable to create directory to save photos.");
return;
}
}
File file = new File(directory.getPath() + file.separator + "IMG_" + SimpleDateFormat.getDateTimeInstance().toString() + ".jpg");
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
ExifInterface exif = new ExifInterface(file.getCanonicalPath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotate = 0;
switch (orientation)
{
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case default:
break;
}
}
};