2011-09-09 35 views
31

Tôi muốn tạo một bitmap từ một dấu thăng.tạo Bitmap từ byteArray trong android

Tôi đã thử các mã sau

Bitmap bmp; 

bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 

ByteArrayInputStream bytes = new ByteArrayInputStream(data); 
BitmapDrawable bmd = new BitmapDrawable(bytes); 
bmp = bmd.getBitmap(); 

Nhưng, Khi tôi đang Tring để khởi tạo đối tượng Canvas với bitmap như

Canvas canvas = new Canvas(bmp); 

Nó dẫn đến một lỗi

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

Sau đó, cách tải bitmap có thể thay đổi từ byteArray.

Xin cảm ơn trước.

Trả lời

58

Bạn cần có một biến thể Bitmap để tạo Canvas.

Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 
Bitmap mutableBitmap = bmp.copy(Bitmap.Config.ARGB_8888, true); 
Canvas canvas = new Canvas(mutableBitmap); // now it should work ok 

Chỉnh sửa: Như Noah Seidman đã nói, bạn có thể làm điều đó mà không cần tạo bản sao.

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inMutable = true; 
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length, options); 
Canvas canvas = new Canvas(bmp); // now it should work ok 
+0

nhờ hoạt động – surendra

+1

Không bitmap.copy() tạo mảng mới hoàn toàn? Điều này có vẻ như một sự lãng phí bộ nhớ. Tôi rất muốn biết làm thế nào để có được một Bitmap có thể thay đổi trực tiếp. –

+0

Thật không may, tôi không biết cách nào khác để có được một Bitmap có thể thay đổi (từ một 'ByteArray', ít nhất). –