Tôi đã viết hoạt động máy ảnh tùy chỉnh để xử lý một số sự cố mà tôi gặp phải với một số thiết bị Android nhất định khi gọi chụp ảnh ý định. Người dùng có thể chọn lưu hình ảnh hoặc chỉ sử dụng dữ liệu được trả lại từ OnPictureTakenCallback
.Vấn đề định hướng hình ảnh Android với hoạt động máy ảnh tùy chỉnh
Sự cố tôi đang gặp đang hiển thị chính xác hình ảnh theo hướng được chụp. Tôi buộc các hoạt động được hiển thị trong bức chân dung bằng cách gọi SetRequestedOrientation
.
Làm thế nào tôi biết được Máy ảnh định hướng chính xác khi người dùng chụp ảnh? tức là người dùng có thể chụp ảnh ở chế độ xoay 90 (dọc).
Tôi đã cố gắng sử dụng getRotation()
trên màn hình mặc định của trình quản lý cửa sổ nhưng phải đặt hướng được yêu cầu thành dọc mà chỉ trả về Surface.ROTATION_0
.
Cập nhật: Để làm rõ vấn đề khác của tôi, làm cách nào tôi có thể xác định hướng từ chỉ byte[]
dữ liệu trong gọi lại hình ảnh nếu người dùng không lưu hình ảnh?
Cập nhật: Sau khi thử các câu trả lời bên dưới với mã này, tất cả những gì tôi nhận được là ExifInterface.ORIENTATION_NORMAL. Tôi cũng đã thay đổi mã của mình để chỉ lưu tệp được trả về từ máy ảnh vì tôi không chắc có một cách dễ dàng để xác định hướng với chỉ có dữ liệu 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;
}
}
};
có thể bất kỳ một sự giúp đỡ http://stackoverflow.com/questions/28379130/how -to-set-camera-image-orientation –