Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Estou com dúvida no curso de Android : Interface, aparência e recursos do device - Parte 2, no exercício do capítulo Câmera e arquivos.

A imagem está sendo exibida com se estivesse "tombada ou deitada", como resolvo esse problema?

4 respostas
solução!

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).