SetRotation (90) для съемки в портретном режиме не работает на устройствах samsung
В соответствии с документацией setRotation (90) должен вращать захваченное изображение в формате JPEG (takePicture в ландшафтном режиме.
Это отлично работает на телефоне HTC, но не работает на Samsung Nexus S и Samsung Galaxy S3. Это ошибка?
Я знаю, что могу использовать поворот матричного преобразования, но хочу, чтобы ОС могла сделать это более эффективно, и не хочу рисковать чрезмерно вращаться на некоторых других устройствах.
изменить
Настройка camera.setDisplayOrientation(90);
сделала предварительный просмотр в портретном режиме, однако это не повлияло на сделанный снимок.
Кроме того, кроме setRotation
, я также попытался установить размер изображения, где я переворачиваю h
с помощью w
: parameters.setPictureSize(1200, 1600);
. Это также не повлияло.
Решение
По-видимому, телефоны Samsung устанавливают тег ориентации EXIF, а не вращают отдельные пиксели. Как предлагалось ariefbayu
, чтение битмапа с использованием BitmapFactory
не поддерживает этот тег. Его образ кода является решением, и это решение также совместимо с использованием inSampleSize
.
Ответы
Ответ 1
Я пытаюсь ответить на это по отношению к тегу 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);
}
Ответ 2
Liso22, переменный поток не имеет никакого значения, просто подключите его растровое изображение, однако вы его получили (decodeFile и т.д.). И если у вас возникают проблемы с "ImageUtil.rotate(), просто напишите" public static Bitmap rotate() "как метод с теми же параметрами и сделайте" реальный образ "равным этому. В любом случае, это решение, похоже, не работает для меня, тег exif возвращает 1 (нормальный), будь то портретный или альбомный.