2010-07-10 29 views
14

Tôi đang cố gắng giảm kích thước hình ảnh được truy xuất hình thành máy ảnh (vì vậy ~ 5-8 mega pixel) xuống một kích thước nhỏ hơn (kích thước lớn nhất là 1024x768). Tôi đã thử mã sau nhưng tôi liên tục nhận được OutOfMemoryError.Thay đổi kích thước hình ảnh bộ nhớ hiệu quả trong 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(); 

Dường như OOM xảy ra trong createBitmap. Có cách nào hiệu quả hơn để thực hiện việc này không? Có lẽ cái gì đó không yêu cầu tôi tải toàn bộ bản gốc vào bộ nhớ?

Trả lời

1

Bạn đang chụp ảnh bằng camera trong ứng dụng của mình? Nếu vậy, bạn nên đặt kích thước hình ảnh thành kích thước nhỏ hơn ở vị trí đầu tiên khi chúng được chụp qua android.hardware.Camera.Parameters.setPictureSize

+0

Không, tôi đang sử dụng 'android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI' để cho phép người dùng chọn một hình ảnh. – Sionide21

Các vấn đề liên quan