2010-07-10 11 views
14

Ich versuche, die Größe der Bilder von der Kamera (so ~ 5-8 Megapixel) auf eine ein paar kleinere Größen (die größte 1024x768) abgerufen zu reduzieren. Ich versuchte den folgenden Code, aber ich bekomme immer eine OutOfMemoryError.Speicher effiziente Bildgröße 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(); 

Es sieht aus wie die OOM passiert während der createBitmap. Gibt es eine mehr speichereffiziente Möglichkeit, dies zu tun? Vielleicht etwas, bei dem ich nicht das gesamte Original in den Speicher laden muss?

Antwort

1

Nehmen Sie das Bild mit der Kamera in Ihrer Anwendung? Wenn dies der Fall ist, sollten Sie die Bildgröße zunächst auf eine kleinere Größe festlegen, wenn sie über

+0

, ich bin mit dem 'android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI' der Benutzer zu lassen, um ein Bild auszuwählen. – Sionide21

Verwandte Themen