2014-09-13 11 views
7

In breve, sto provando a selezionare un'immagine da una galleria del telefono per visualizzarla come una bitmap con cui giocare (ottenere un RGB medio) in un'altra attività.Issue converting URI to Bitmap (2014):

Per prima cosa, mi sono imbattuto in un paio di argomenti relativi alla conversione di URI in Bitmap. Molti di loro ha suggerimenti come (da: Retrieve bitmap from uri):

Uri imageUri = intent.getData(); 
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri); 
    Imageview my_img_view = (Imageview) findViewById (R.id.my_img_view); 
    my_img_view.setImageBitmap(bitmap); 

La linea Bitmap è la linea importante. Ogni volta che eseguo la mia app Android sul mio simulatore, l'app si arresta in modo anomalo (il debugger in Eclipse conferma si verifica sull'URI -> linea di conversione Bitmap) e se inserisco la conversione in attività diverse (è in bundle), si blocca ancora sulla linea di conversione Uri -> Bitmap.

Non sono sicuro del motivo. Ho provato a rendere il mio intento sia "EXTERNAL_CONTENT_URI" che "INTERNAL_CONTENT_URI" nell'intento iniziale e nessuna delle due scelte è importante. Continuerò a cercare potenziali soluzioni al mio problema, ma al momento sono a corto di tempo e ritengo che sarebbe utile se avessi qualche consiglio da fonti esterne.

Qualcuno sa perché si blocca sempre su quella linea, o se ci sono possibili soluzioni al mio problema? Grazie.

risposta

7

Si prega di ottenere InputStream dal uri

Uri IMAGE_URI = imageReturnedIntent.getData(); 
InputStream image_stream = getContentResolver().openInputStream(IMAGE_URI); 
Bitmap bitmap= BitmapFactory.decodeStream(image_stream); 

Inizio intento

private static final int REGUEST_CODE = 100; 
Intent photoPicker = new Intent(Intent.ACTION_PICK); 
photoPickerIntent.setType("image/*"); 
startActivityForResult(photoPickerIntent, REGUEST_CODE); 

ottenere il risultato

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
switch(requestCode) { 
case REGUEST_CODE : 
    if(resultCode == RESULT_OK){ 
     Uri IMAGE_URI = imageReturnedIntent.getData(); 
     InputStream image_stream = getContentResolver().openInputStream(IMAGE_URI); 
     Bitmap bitmap= BitmapFactory.decodeStream(image_stream); 
     my_img_view.setImageBitmap(bitmap) 
    } 
} 

}

+1

Credo che ciò contribuirà a pieno ogni uno –

0

Quanto è grande il bitmap che si sta cercando passare? Puoi copiare/incollare il messaggio di errore che stai ricevendo?

Una possibile causa dell'arresto anomalo dell'app è che i dati che è possibile trasferire nella memoria principale da un'attività all'altra sono limitati. Credo che i dati massimi siano di circa 1-2 MB, a seconda dell'hardware e della versione del sistema operativo, anche se non riesco a trovare un riferimento.

3

ottenere il risultato

Uri IMAGE_URI = imageReturnedIntent.getData(); 
InputStream image_stream = getContentResolver().openInputStream(IMAGE_URI); 
Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(IMAGE_URI)); 
my_img_view.setImageBitmap(bitmap) 
+1

Buon lavoro continuate così –