Estou construindo um aplicativo que usa câmera para tirar fotos. Aqui está meu código-fonte para fazer isso:
File file = new File(Environment.getExternalStorageDirectory(),
imageFileName);
imageFilePath = file.getPath();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);
No onActivityResult()
método, eu uso BitmapFactory.decodeStream()
para pegar a imagem.
Quando executo meu aplicativo no Nexus um, ele funciona bem. Mas quando executo no Samsung Galaxy S ou HTC Inspire 4G, a direção da imagem não está correta.
- Capture no modo retrato, a imagem real (salve no cartão SD) sempre gira 90 graus.
Visualização da imagem após a foto --------- Imagem real no cartão SD
- Capture com o modo paisagem, tudo é bom.
Visualização da imagem após a foto --------- Imagem real no cartão SD
android
orientation
android-camera-intent
Nguyen Minh Binh
fonte
fonte
Respostas:
Existem alguns tópicos e questões semelhantes por aqui. Já que você não está escrevendo sua própria câmera, acho que se resume a isso:
alguns dispositivos giram a imagem antes de salvá-la, enquanto outros simplesmente adicionam a marca de orientação aos dados exif da foto.
Eu recomendo verificar os dados exif da foto e procurar especialmente
Como a foto está sendo exibida corretamente em seu aplicativo, não tenho certeza de onde está o problema, mas isso definitivamente deve colocá-lo no caminho certo!
fonte
Acabei de encontrar o mesmo problema e usei isso para corrigir a orientação:
Se a largura do Bitmap for maior do que a altura, a imagem retornada está em paisagem, então eu giro 90 graus.
Espero que ajude alguém com este problema.
fonte
Existem duas coisas necessárias:
A visualização da câmera precisa ser igual à sua rotação. Definir isso por
camera.setDisplayOrientation(result);
Salve a foto capturada como visualização da câmera. Faça isso via
Camera.Parameters
.Espero que ajude.
fonte
parameters.setRotation(result)
não?fonte
Outra opção é girar o bitmap na tela de resultados assim:
fonte
Eu também tenho esse tipo de problema para algum dispositivo:
fonte
Tente desta forma: static Uri image_uri; Bitmap estático taken_image = null;
}
fonte
Chega de verificar os dados exif da foto. Vá com calma com o Glide .
O Google nos apresentou uma biblioteca Image Loader para Android desenvolvida pela bumptech chamada Glide como uma biblioteca recomendada pelo Google. Ele tem sido usado em muitos projetos de código aberto do Google até agora, incluindo o aplicativo oficial Google I / O 2014.
Ex: Glide.with (context) .load (uri) .into (imageview);
Para mais: https://github.com/bumptech/glide
fonte
Espero que isso ajude !! obrigado
fonte
Espero que isso ajude. Obrigado!
fonte
Apenas encontre o mesmo problema aqui, o snippet de código abaixo funciona para mim:
espero que isso ajude :)
fonte
Tente isso no callback de surfaceChanged:
fonte
// clique no botão
// Método onActivityResult
// cria um caminho de arquivo de classe
public class FilePath {
}
fonte
O código é funcional para paisagem e retrato @frontCameraID = variável conseguiu o método clássico desejado para a câmera de exibição
Método para obter a orientação y rotação para salvar a imagem e exibir a orientação @result = orientação na visualização da câmera @rotationPicture = rotação necessária para salvar a imagem corretamente
Alguém pergunta sobre o código, por favor me diga.
fonte
duas soluções de uma linha usando Picasso e biblioteca glide
Depois de gastar muito tempo com muitas soluções para o problema de rotação de imagens, finalmente encontrei duas soluções simples. Não precisamos fazer nenhum trabalho adicional. Picasso e Glide são uma biblioteca muito poderosa para lidar com imagens em seu aplicativo inclui. Ele lerá os dados EXIF da imagem e as girará automaticamente.
Usando a biblioteca glide https://github.com/bumptech/glide
Usando a biblioteca do Picasso https://github.com/square/picasso
fonte