Tôi đang làm việc trong một ứng dụng Android và tôi đang sử dụng bitmap để liên kết hình ảnh với ImageView. Yêu cầu của tôi là xoay ImageView đó và tạo một đường viền cho ImageView đó. Tôi đã thực hiện thành công điều này, nhưng sau khi ứng dụng sử dụng hoạt động này hai ba lần một lỗi "lực đóng" xuất hiện nói rằng Bitmap ra khỏi bộ nhớ VM. Hãy giúp tôi giảm thiểu mức tiêu thụ bộ nhớ bitmap trong mã của tôi. Và cho tôi biết làm thế nào để sửa đổi mã cho cùng?Bitmap lỗi bộ nhớ trong android ...
final int BORDER_WIDTH = 5;
// Set the border color
final int BORDER_COLOR = Color.WHITE;
Bitmap res = Bitmap.createBitmap(CAPTURE_IMAGE.getWidth() + 2
* BORDER_WIDTH, CAPTURE_IMAGE.getHeight() + 2 * BORDER_WIDTH,
CAPTURE_IMAGE.getConfig());
System.gc();
Canvas canvas = new Canvas(res);
Paint paint = new Paint();
paint.setColor(BORDER_COLOR);
canvas.drawRect(0, 0, res.getWidth(), res.getHeight(), paint);
canvas.drawBitmap(CAPTURE_IMAGE, BORDER_WIDTH, BORDER_WIDTH, paint);
Matrix mat = new Matrix();
// Set the Imageview position
mat.postRotate(355);
bMapRotate = Bitmap.createBitmap(res, 0, 0, res.getWidth(),
res.getHeight(), mat, true);
System.gc();
res.recycle();
res = null;
paint = null;
canvas = null;
mat = null;
// Set the captured bitmap image in the imageview
mShareImageView.setImageBitmap(bMapRotate);
tôi đã tạo một giải pháp JNI tốt để tránh hết bộ nhớ bằng cách xóa hàng rào giới hạn kích thước heap tối đa. [** đây là liên kết **] (http://stackoverflow.com/questions/14398670/android-rotating-a-bitmap-using-jni-ndk#comment20033361_14398670) vào đoạn trích của tôi. một số lưu ý: - thay thế trong mã mỗi trường hợp của "uint16_t" với "uint32_t" (đó là lỗi trên mã của tôi mà tôi đã hỏi). - bitmap đầu vào và đầu ra phải có cấu hình 8888 (là ARGB) - bitmap đầu vào sẽ được tái chế trong quá trình xử lý. - mã xoay hình ảnh 90 đồng hồ đếm ngược suy thoái. tất nhiên bạn có thể thay đổi nó tùy thuộc vào –