setRotation(90) для съемки в портретном режиме не работает на устройствах Samsung
Согласно документации, setRotation (90) должен вращать захваченное изображение JPEG ( takePicture в альбомной ориентации).
Это отлично работает на телефоне HTC, но не работает на Samsung Google Nexus S и Samsung Galaxy S3. Это ошибка?
Я знаю, что могу использовать вращение с матричным преобразованием, но хочу, чтобы ОС могла делать это более эффективно, и не хочу рисковать чрезмерным вращением на некоторых других устройствах.
редактировать
настройка camera.setDisplayOrientation(90);
сделал предварительный просмотр в портретном режиме, однако это не оказало никакого влияния на сделанный снимок.
Кроме того setRotation
Я также попытался установить размер изображения - где я переворачиваю h
с w
: parameters.setPictureSize(1200, 1600);
, Это также не имело никакого влияния.
решение
Очевидно, телефоны Samsung устанавливают тег ориентации EXIF, а не вращают отдельные пиксели. Как ariefbayu
предложил, читая Bitmap используя BitmapFactory
не поддерживает этот тег. Его пример кода является решением, и это решение также совместимо с использованием inSampleSize
,
2 ответа
Я пытаюсь ответить на это в связи с тегом Exif. Вот что я сделал:
Bitmap realImage = BitmapFactory.decodeStream(stream);
ExifInterface exif=new ExifInterface(getRealPathFromURI(imagePath));
Log.d("EXIF value", exif.getAttribute(ExifInterface.TAG_ORIENTATION));
if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("6")){
realImage=ImageUtil.rotate(realImage, 90);
}else if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("8")){
realImage=ImageUtil.rotate(realImage, 270);
}else if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("3")){
realImage=ImageUtil.rotate(realImage, 180);
}
ImageUtil.rotate()
:
public static Bitmap rotate(Bitmap bitmap, int degree) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix mtx = new Matrix();
mtx.postRotate(degree);
return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
}
Liso22, переменная stream не имеет значения, просто подключите ваше растровое изображение, как бы вы его ни получили (decodeFile и т. Д.). И если у вас есть проблемы с ImageUtil.rotate(), просто напишите "public static Bitmap rotate()" как метод с теми же параметрами и сделайте "real image" равным этому. В любом случае, мне кажется, что это решение не работает, тэг exif возвращает 1 (нормальное) как в книжной, так и в альбомной ориентации.