Trong onPictureTaken
, tôi muốn làm như sau:Làm cách nào để tránh "ngoại lệ bộ nhớ" khi thực hiện xử lý Bitmap?
Bitmap decodedPicture = BitmapFactory.decodeByteArray(data, 0, data.length);
Matrix matrix = new Matrix();
matrix.preScale(-1.0f, 1.0f);
Bitmap picture = Bitmap.createBitmap(decodedPicture, 0, 0, decodedPicture.getWidth(), decodedPicture.getHeight(), matrix, false);
View v1 = mainLayout.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap screenshot = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
Bitmap scaledPicture = Bitmap.createScaledBitmap(picture, screenshot.getWidth(), screenshot.getHeight(), true);
Bitmap compos = Bitmap.createBitmap(scaledPicture.getWidth(), scaledPicture.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(compos);
canvas.drawBitmap(scaledPicture, new Matrix(), null);
canvas.drawBitmap(screenshot, new Matrix(), null);
MediaStore.Images.Media.insertImage(getContentResolver(), compos, "name" , "description");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Yêu cầu duy nhất của tôi là tôi muốn lưu một bức ảnh chất lượng cao ... Có vẻ tôi có thể phải hy sinh đó.
Trên Nexus 4 và các thiết bị mới hơn, mã này chạy tốt và như mong đợi. Nhưng trên các thiết bị cũ có ít bộ nhớ hơn, tôi sắp hết RAM! :(
Làm cách nào để thực hiện thao tác xử lý ảnh tương tự mà không cần chạy lên giới hạn bộ nhớ? Tôi không cố gắng hiển thị những hình ảnh này trên màn hình, vì vậy các giải pháp phải làm với hình ảnh thu nhỏ lại 't thực sự áp dụng ở đây ...
Bạn có thể vô giá trị một số tài liệu tham khảo, và sau đó gợi ý một GC? Điều đó sẽ loại bỏ một số dữ liệu không cần thiết ... – tilpner