A imagem está sendo exibida com se estivesse "tombada ou deitada", como resolvo esse problema?
A imagem está sendo exibida com se estivesse "tombada ou deitada", como resolvo esse problema?
Olá Ricardo,
Este é um bug conhecido da câmera no Android em alguns devices/versões que, ao clicar em salvar uma foto, antes de efetivamente salvar, a câmera muda de orientação.
Você pode usar a estratégia de antes de salvar, rotacionar a foto para salvar na posição correta. Mas podem ser usadas outras estratégias também.
Abraços!
Obrigado Suelen, porém o meu questionamento é exatamente como rotacionar a imagem...
Tente antes de tirar a foto. Apertar Ctrl+F11, o emulador irá rodar a tela. Veja se deu certo. =)
Oi Ricardo,
para rotacionar a imagem programaticamente, você tem duas alternativas:
1) sempre rotacionar o Bitmap obtido. Para isso, basta passar o ângulo de rotação para o objeto Matrix
:
public Bitmap rotacionaImagem(Bitmap bmp, float angulo) {
Matrix matrix = new Matrix();
matrix.postRotate(angulo);
return Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
}
2) rotacionar o Bitmap apenas se ele estiver numa orientação indesejada.
Para isso, precisaremos saber qual o ângulo desse Bitmap. É só usar a classe ExifInterface
passando o caminho da sua imagem...
ExifInterface exif = new ExifInterface("caminho/da/sua/imagem");
... e pegar o valor inteiro do metadado referente à orientação. Caso não haja esse metadado, o valor a ser devolvido será ExifInterface.ORIENTATION_NORMAL
:
int orientacao = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
Com essa orientação (que não é bem um ângulo), você pode comparar com os valores ORIENTATION_ROTATE_180
, ORIENTATION_ROTATE_270
ou ORIENTATION_ROTATE_90
e rotacionar seu Bitmap usando o código da sugestão (1).