2012-10-26 40 views
9

Tôi vừa mới encontered một vấn đề khó khăn ...lưu hình ảnh lớn để PNG

Dưới đây là câu chuyện của tôi:

Điện thoại của tôi là Samsung Galaxy Note, bình thường, nó có hình ảnh ở độ phân giải 3264 * pixel. Tôi thích những bức ảnh đẹp khi đang tìm kiếm thông tin chi tiết, nhưng ở đây tôi ghét nó vì nó rất lớn để xử lý trong Android. Tôi có thể đọc và hiển thị một hình ảnh của độ phân giải lớn này, tôi cần phải vẽ các đường trên đầu trang của nó, sau đó tôi cần phải lưu cả hai hình ảnh và dòng để một png. đau đầu của tôi là Android của tôi luôn mang lại cho tôi Out of memery ngoại lệ, khi đang cố gắng để tạo ra một bitmap có thể thay đổi như thế này:

Bitmap bmp = Bitmap.createBitmap(3264, 2448, Config.RGB_565); 
    Canvas cv = new Canvas(bmp); 
    //draw a line and save and restore canvas 
    // I found an alternative solution yet proven to be uncorrect: 
    myImageView.setDrawingCacheEnabled(true); 
    myImageView.buildDrawingCache(true); 
    Bitmap bmp = myImageView.getDrawingCache(); 
    //save bmp to png 

Khi

bmp.width * bmp.height * 4 > getScaledMaximumDrawingCacheSize() 

ngoại lệ nhảy ra. Tôi đã thử nghiệm myImageView.measure(...)myImageView.layout(...), không hoạt động đối với tôi. (Mọi thứ đều ổn, khi tôi kiểm tra cùng một mã sử dụng hình ảnh nhỏ hơn)

Bất kỳ chuyên gia nào biết cách giải quyết vấn đề này hoặc đưa ra giải pháp cho tôi? Cảm ơn!

+0

Các bạn đã tính toán bộ nhớ cần thiết để tổ chức một bitmap đó mô và chất lượng. Đó là rất lớn bất kể nền tảng bạn đang phát triển, nhưng khi bạn đã tìm thấy nhiều phiền hà trên các thiết bị bộ nhớ bị hạn chế nếu bạn không cẩn thận quản lý các đối tượng bitmap của bạn. – paulkayuk

+1

bạn có thể muốn xem http://stackoverflow.com/questions/10993568/android-image-file-size-limit-and-how-to-handle-large-images – erbsman

+0

Bạn có thể muốn thử phần đầu tiên bitmap lớn thành nhiều phần sau đó cẩn thận vẽ và sắp xếp các dòng trên chúng. Sau đó, bạn cần phải đặt các mảnh nhỏ trở lại bitmap lớn hoàn chỉnh. – dumbfingers

Trả lời

1

Có lẽ không phải giải pháp xác định, nhưng bạn có cố gắng tăng kích thước heap không?

Đối với phiên bản Android 2.2 hoặc thấp hơn:

dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(sizeInBytes); 

Đối với Android 2.3 or or higher versions:

android:largeHeap="true" 
Các vấn đề liên quan