2010-07-10 21 views
14

Sto cercando di ridurre le dimensioni delle immagini recuperate dalla fotocamera (quindi ~ 5-8 mega pixel) fino a uno a pochi formati più piccoli (il più grande è 1024x768). Ho provato il seguente codice ma ottengo costantemente un OutOfMemoryError.Ridimensionamento delle immagini con memoria efficiente in Android

Bitmap image = BitmapFactory.decodeStream(this.image, null, opt); 
int imgWidth = image.getWidth(); 
int imgHeight = image.getHeight(); 

// Constrain to given size but keep aspect ratio 
float scaleFactor = Math.min(((float) width)/imgWidth, ((float) height)/imgHeight); 

Matrix scale = new Matrix(); 
scale.postScale(scaleFactor, scaleFactor); 
final Bitmap scaledImage = Bitmap.createBitmap(image, 0, 0, imgWidth, imgHeight, scale, false); 

image.recycle(); 

Sembra che l'OOM avviene durante la createBitmap. C'è un modo più efficiente di memoria per fare questo? Forse qualcosa che non mi richiede di caricare l'intero originale in memoria?

risposta

1

Stai scattando l'immagine con la fotocamera all'interno dell'applicazione? In tal caso, è necessario impostare le dimensioni dell'immagine su una più piccola in primo luogo quando vengono acquisite tramite android.hardware.Camera.Parameters.setPictureSize

+0

No, io sto usando il 'android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI' per consentire all'utente di selezionare un'immagine. – Sionide21

Problemi correlati