Oi gente, não sei o que fazer, meu app chama a câmera padrão do android, mas quando tiro fotos no modo retrato, elas rotacionam automaticamente 90 graus quando são inseridas no ImageButton ou no ImageView, abaixo estão as linhas de código envolvidas no processo de chamar a câmera, salvar o path dela no banco de dados e depois inseri-la num ImageButton:
private class TirarFoto implements OnClickListener {
public void onClick(View v) {
mudarFotoDialog.dismiss();
processoFotoContato = true;
Thread processoParalelo = new Thread(new TirarFotoContato());
processoParalelo.start();
}
}
protected class TirarFotoContato implements Runnable {
public void run() {
if (processoFotoContato) {
//Chama a câmera nativa do Android.
//Intent it = new Intent("android.media.action.IMAGE_CAPTURE");
//startActivityForResult(it, 0);
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(Intent.createChooser(cameraIntent,"Select Picture"), 0);
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent it) {
super.onActivityResult(requestCode, resultCode, it);
if((requestCode == 0) && (resultCode == RESULT_OK)){
final ContentResolver cr = getContentResolver();
final String[] p1 = new String[] {MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATE_TAKEN};
Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC");
if ( c1.moveToFirst() ) {
String uristringpic = "content://media/external/images/media/" +c1.getInt(0);
Uri photographedImage = Uri.parse(uristringpic);
gravarEstabelecerImagem(photographedImage);
}
c1.close();
}
}
private void gravarEstabelecerImagem(Uri uri) {
//Preparação da imagem escolhida/fotografada pelo usuário
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
//Grava o endereço(filePath) da imagem do contato no banco de dados
acoesBancoDados = new LerGravarExcluirScript(DetalhesContato.this);
contatos = acoesBancoDados.listarContatos();
//Recupera o objeto Contato que foi clicado:
objContato = contatos.get(indice);
acoesBancoDados.salvarImagem(filePath, objContato);
//Fecha o Banco de Dados
acoesBancoDados.fechar();
//Insere a imagem no ImageButton(profilePictureButton)
Bitmap imagem = BitmapFactory.decodeFile(filePath);
Drawable d = profilePictureButton.getDrawable();
try{
//"ajudante" é objeto da classe MetodosAuxiliares.
profilePictureButton.setImageBitmap(ajudante.estabelecerImagemPerfil(imagem, d));
}catch(NullPointerException e){
profilePictureButton.setImageResource(R.drawable.default_profile_picture);
}
//Encerra o processo paralelo
processoFotoContato = false;
}
public Bitmap estabelecerImagemPerfil(Bitmap img, Drawable drawable) {
Bitmap imagemPredimensionada = null;
Bitmap scaledImagem = null;
boolean alturaEMaior = false;
boolean larguraEMaior = false;
int h = img.getHeight();
int w = img.getWidth();
Drawable d = drawable;
int drawableAltura = d.getIntrinsicHeight ();
int drawableLargura = d.getIntrinsicWidth ();
if(w > h) {
larguraEMaior = true;
int posicaoX = (w - h)/2;
imagemPredimensionada = Bitmap.createBitmap (img, posicaoX, 0, h, h);
}else if(h > w) {
alturaEMaior = true;
int posicaoY = (h - w)/2;
imagemPredimensionada = Bitmap.createBitmap (img, 0, posicaoY, w, w);
}
//Log.i("Contatos", "Altura drawable do ImageButton: " + drawableAltura + ", Largura drawable do ImageButton: " + drawableLargura);
if(((drawableAltura == 270) || (drawableLargura == 270)) && (larguraEMaior || alturaEMaior)) {
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 270, 270, true);
}else if(((drawableAltura == 270) || (drawableLargura == 270)) && !larguraEMaior && !alturaEMaior){
scaledImagem = Bitmap.createScaledBitmap(img, 270, 270, true);
}else
if(((drawableAltura == 157) || (drawableLargura == 157)) && (larguraEMaior || alturaEMaior)) {
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 157, 157, true);
}else if(((drawableAltura == 157) || (drawableLargura == 157)) && !larguraEMaior && !alturaEMaior) {
scaledImagem = Bitmap.createScaledBitmap(img, 157, 157, true);
}else
if(((drawableAltura == 120) || (drawableLargura == 120)) && (larguraEMaior || alturaEMaior)) {
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 120, 120, true);
}else if(((drawableAltura == 120) || (drawableLargura == 120)) && !larguraEMaior && !alturaEMaior) {
scaledImagem = Bitmap.createScaledBitmap(img, 120, 120, true);
}
return scaledImagem;
}