2017-01-05 1 views
1

Mon application est censé obtenir une image de la galerie et l'afficher dans un ImageView, je reçois ce que je veux avec toutes les images sauf celles prises avec mon retour caméra, ils apparaissent dans la galerie pour moi de choisir et même de retourner le chemin, mais tout ce que je reçois est vide dans mon ImageView.Intent seulement obtenir des images de la caméra arrière

Voici le code:

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_PICK); 
startActivityForResult(intent, SELECT_PICTURE); 

mon code onActivityResult est la suivante:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && null != data) { 
     Uri uri = data.getData(); 

     try { 
      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri); 
      ImageView iv = (ImageView) getView().findViewById(R.id.iv_foto); 
      iv.setImageBitmap(bitmap); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Il travaille avec des images prises avec mon appareil photo avant.

Je n'ai pas essayé l'application sur un autre téléphone mais si cela se produit dans la mienne, il y a de fortes chances que quelqu'un d'autre ait le même problème.

+1

S'il vous plaît ajouter le code où vous affichez l'image dans votre imageview. – Christopher

+1

Comment définissez-vous Image en ImageView, montrez ce code. – Rahul

+0

Les images de la caméra arrière sont généralement assez volumineuses. Compressez-les avec Bitmap Factory avant de l'afficher dans imageView –

Répondre

1

Le problème est lié à la taille de l'image.

J'ai fixé avec succès le même problème avec mise à l'échelle du Bitmap avant d'afficher dans le ImageView

Bitmap sourceBitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri); 

try { 
     Bitmap sourceBitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri); 

     float rotationInDegrees = 0; 

     Cursor cursor = contentResolver.query(uri, new String[]{MediaStore.Images.ImageColumns.ORIENTATION}, 
       null, 
       null, 
       null); 

     if (cursor != null && cursor.moveToFirst()) { 
      int col = cursor.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION); 
      if (col != -1) 
       rotationInDegrees = cursor.getInt(col); 
      cursor.close(); 
     } 

     Matrix matrix = new Matrix(); 
     matrix.preRotate(rotationInDegrees); 

     int width, height; 
     double aspectRatio; 
     aspectRatio = (double) sourceBitmap.getWidth()/sourceBitmap.getHeight(); 
     if (sourceBitmap.getHeight() > sourceBitmap.getWidth()) { 
      height = MAX_IMAGE_DIMENSION; 
      width = (int) (height * aspectRatio); 
     } else { 
      width = MAX_IMAGE_DIMENSION; 
      height = (int) (width/aspectRatio); 
     } 
     sourceBitmap = Bitmap.createScaledBitmap(sourceBitmap, width, height, false); 

     return Bitmap.createBitmap(sourceBitmap, 0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight(), matrix, false); 

} catch (IOException e) { 
     e.printStackTrace(); 
     throw new RuntimeException("[email protected]: IOException"); 
} 
+0

'mise à l'échelle du bitmap avant l'affichage'. Intéressant. Mais dans de nombreux cas, vous ne pouvez pas l'adapter de cette façon car 'sourceBitmap' sera déjà' null' à la première déclaration en raison d'un manque de mémoire. Vous ne vérifiez même pas pour 'null' maintenant. – greenapps

+0

Solution parfaite! Merci beaucoup! – otrebla

1

la raison en est que je pense que la mémoire hors de l'index. s'il vous plaît se référer ce lien Compress camera image before upload vous pouvez tenir

+0

Oh, c'est peut-être le problème, je vais vérifier le code bientôt. Merci beaucoup. – otrebla

0

Même après avoir compressé si vous ne pouvez pas l'obtenir, essayez d'utiliser une bibliothèque pour choisir les images de la galerie.

+0

Il obtient des images de la galerie SAUF celles prises avec l'appareil photo arrière, une bibliothèque résoudrait sûrement mon problème, mais je veux savoir pourquoi cette chose se passe en premier lieu. – otrebla