Domanda

I stava cercando di fare un app che ha avuto anche la possibilità di lasciare all'utente di selezionare carta da parati che vorrebbe set. Sono riuscito questo chiamando la Galleria Intent. Una volta che l'utente seleziona un'immagine specifica, il percorso dei dati dell'immagine viene restituito a me che poi l'anteprima per l'utente impostando l'immagine su un ImageView.

Il problema pota in su quando la dimensione dell'immagine (e / o la risoluzione) è superiore a quello che si aspetta android. Ciò si traduce in fallimento di mio modulo.

E come se ciò non bastasse, Wen i tentativi degli utenti di selezionare qualche altra carta da parati (e nel mio caso di prova l ' "altro" carta da parati era anche di dimensioni> 700KB) quindi l'applicazione si blocca con il "OutOfMemoryException" ...

Helppp me qui ragazzi !!!

Per Galleria uso i Intent:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_IMAGE);

Per impostare la carta da parati che uso:

InputStream is = getContentResolver().openInputStream(Uri.parse(uri_returned_from_intent)); 
Bitmap bgImage = BitmapFactory.decodeStream(is);//OutOfMemory error thrown here
setWallpaper(bgImage);

Così ho 2 problemi da affrontare:

  1. Come ritagliare l'immagine prima di impostare come sfondo ...
  2. Non capisco y OutOfMemoryException è gettato, coz nessuno dei miei dimensioni delle immagini superano anche 1MB ... e credo che il bilancio VM in caso di N1 è 24Mb se non sbaglio m ...
È stato utile?

Soluzione

Si dovrebbe decodificare opzione inSampleSize con per ridurre il consumo di memoria.

Un altro inJustDecodeBounds opzione può aiutare a trovare il valore corretto inSampleSize

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top