Ho un'applicazione molto semplice con un ImageView e un pulsante. La prima risorsa disegnabile caricata dal mio ImageView è specificata con il tag "android: src" nel layout XML, tuttavia in fase di esecuzione voglio cambiare l'immagine visualizzata da esso. Per farlo, avvio un'attività per il risultato di prelevare un'immagine dalla scheda SD (intento inviato a MediaStore.Images.Media.EXTERNAL_CONTENT_URI). Tuttavia quando è selezionata la foto, cerco di aggiornare l'ImageView con URI del Picture scelto, ma ottengo il messaggio "java.lang.OutOfMemoryError: formato bitmap supera bilancio VM"Modifica del contenuto ImageView causa OutOfMemoryError
I'am cercando di caricare immagini scattate con la fotocamera (le dimensioni delle foto sono circa 1.1M) del mio HTC-Hero ma senza successo, sembra funzionare solo con le immagini che sono meno di 500KB. Tuttavia ho bisogno di caricare le immagini scattate con la fotocamera. Come posso risolvere questo? cosa sto sbagliando. Mi sembra che il codice sia molto semplice e dovrebbe funzionare.
public void onClick(View v){
Intent selectImageIntent=new Intent(Intent.ACTION_PICK ,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(selectImageIntent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==Activity.RESULT_OK){
Uri selectedImageUri = data.getData();
Log.i(TAG,"chosen image: "+selectedImageUri.toString());
ImageView imageView = (ImageView) this.findViewById(R.id.ImageView01);
imageView.setImageURI(selectedImageUri);//here I get the OutOfMemoryError
imageView.invalidate();
}else{
//canceled
}
}
p.s. questa è l'unica cosa che l'App dovrebbe fare, non sto creando altri oggetti, quindi mi piacerebbe sottolineare che non sto usando lo spazio heap per altre cose oltre a visualizzare l'immagine.
Questo metodo consente di risparmiare se si sta utilizzando FragmentStatePagerAdapter con ImageViews poiché il riciclo della bitmap causerà un errore durante il rigonfiamento della vista. –