2010-09-11 23 views
25

Tôi tải một bitmap từ một nguồn tài nguyên như vậy:tải một nguồn lực để một bitmap có thể thay đổi

Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image); 

Những gì tôi muốn làm là thực hiện một số thay đổi đối với bitmap trước Nó được vẽ vào khung chính trong tôi vẽ phương pháp (Có vẻ như lãng phí để lặp lại nhiều bản vẽ trong vòng lặp chính của tôi khi nó sẽ không thay đổi). Tôi đang làm cho những thay đổi bitmap như sau:

Canvas c = new Canvas(mBackground); 
c.drawARGB(...); // etc 

Vì vậy, tự nhiên tôi nhận được một ngoại lệ

java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor 

Vì vậy, để tránh điều đó tôi đã thực hiện một bản sao của bitmap để nó có thể thay đổi

Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image).copy(Bitmap.Config.ARGB_8888, true); 

Điều gì tránh vấn đề tuy nhiên đôi khi nó gây ra Ngoại lệ OutOfMemory, bạn có biết cách nào tốt hơn để đạt được những gì tôi muốn không?

Trả lời

11

Có một số cách để tạo bản sao của nó. Chủ đề này có thể giúp bạn: http://www.anddev.org/how_to_modify_the_image_file-t513.html

+4

sao chép vào trong bộ nhớ không làm việc cho tôi, nếu nó là hình ảnh ban đầu, tôi đã tìm ra cách sử dụng MappedByteBuffer, tôi đã viết blog nó ở đây: http: // sudarnimalan. blogspot.com/2011/09/android-convert-immutable-bitmap-into.html –

1

Bạn muốn sử dụng tốt hơn RapidDecoder.

import rapid.decoder.BitmapDecoder; 

Bitmap mBackground = BitmapDecoder.from(res, R.drawable.image) 
     .mutable().decode(); 

trình cho cấp API 8.

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