从android中的byteArray创建Bitmap

sur*_*dra 36 android canvas bitmap

我想从bytearray创建一个位图.

我尝试了以下代码

Bitmap bmp;

bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
Run Code Online (Sandbox Code Playgroud)

ByteArrayInputStream bytes = new ByteArrayInputStream(data); 
BitmapDrawable bmd = new BitmapDrawable(bytes); 
bmp = bmd.getBitmap(); 
Run Code Online (Sandbox Code Playgroud)

但是,当我想用​​位图初始化Canvas对象时

Canvas canvas = new Canvas(bmp);
Run Code Online (Sandbox Code Playgroud)

它会导致错误

java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
Run Code Online (Sandbox Code Playgroud)

然后如何从byteArray获取可变位图.

提前致谢.

Gab*_*gut 69

你需要一个mutable Bitmap才能创建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
Run Code Online (Sandbox Code Playgroud)

编辑:正如Noah Seidman所说,你可以在不创建副本的情况下完成.

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
Run Code Online (Sandbox Code Playgroud)

  • 使用BitmapFactory.Options.inMutable = true.你不需要复制,这是一种浪费. (3认同)