После съемки фотографии, когда устройство находится в портрете, используя API-интерфейс камеры и предварительный просмотр SurfaceView
, созданное изображение поворачивается на 90 градусов. Я понимаю, что это проблема, связанная с некоторыми телефонами Android, включая Samsung Galaxy S5. Я разрабатываю - есть несколько вопросов о переполнении стека об этом - see here и here. Было предложено, чтобы файл изображения содержал метаданные EXIF, которые будут указывать ориентацию, которую он повернул, чтобы вы могли использовать это, чтобы повернуть изображение назад, чтобы получить правильную ориентацию. Я сделал именно это, но по какой-то причине ExifInterface.TAG_ORIENTATION
- 1
- ORIENTATION_NORMAL
. Поэтому я не могу определить, сколько изображения нужно повернуть, чтобы оно работало на всех устройствах. Хотя это решение, похоже, сработало для других. Что я сделал не так, или как еще можно решить эту проблему?Растровое изображение поворачивается после фотосъемки с камерой
Некоторые псевдокод:
//in onCreate
camera = getCameraInstance();
setCameraDisplayOrientation(this, cameraID, camera);
//in OnClickListener
camera.takePicture(null, null, picCallback);
//callback:
onPictureTaken {
//create a File using getExternalStoragePublicDirectory(PICTURES) + "appname" - create directory if doesn't exist
//write file to disk via FileOutputStream
//attempt to correct the image orientation if needed
Bitmap correctBitmap = getCorrectOrientationBitmap(picFile.getAbsolutePath());
}
public Bitmap getCorrectOrientationBitmap(String photoFilePath) {
// Read EXIF Data
ExifInterface exif = null;
try {
exif = new ExifInterface(photoFilePath);
} catch (IOException e) {
e.printStackTrace();
return null;
}
String orientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
//problem: orientation is 1 - ORIENTATION_NORMAL despite the fact the image is rotated to the right 90 degrees
//rotate the image based on EXIF orientation
}
//later on
myImageView.setImageBitmap(correctBitmap);
//shows image rotated to the right because getCorrectOrientationBitmap didn't rotate it
http://stackoverflow.com/questions/14066038/why-image-captured-using-camera-intent-gets-rotated-on-some-devices-in-android внимательно читает все ответы .. u не получают правильный bmp.ORIENT .. см. запрос контента на «mediaStore» по ссылке .. это samsung only issue AFAIK –
@RobertRowntree Я не использую 'MediaStore' – Joey