在android中从byteArray创建Bitmap

发布于 2024-12-04 06:18:38 字数 571 浏览 0 评论 0原文

我想从 bytearray 创建位图。

我尝试了以下代码

Bitmap bmp;

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

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

但是,当我尝试使用位图初始化 Canvas 对象时,

Canvas canvas = new Canvas(bmp);

会导致错误

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

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

提前致谢。

I want to create a bitmap from a bytearray .

I tried the following codes

Bitmap bmp;

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

and

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

But ,When i am tring to initialize the Canvas object with the bitmap like

Canvas canvas = new Canvas(bmp);

It leads to an error

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

Then how to get a mutable bitmap from an byteArray.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小猫一只 2024-12-11 06:18:38

您需要一个可变的位图才能创建画布。

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

编辑:正如诺亚·塞德曼所说,您可以在不创建副本的情况下完成此操作。

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

You need a mutable Bitmap in order to create the 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

Edit: As Noah Seidman said, you can do it without creating a copy.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文