BitmapFactory.decodeResource在Android 2.2中返回可变的位图

我正在开发应用程序,并在运行Android 2.2的设备上对其进行测试。在我的代码中,我使用了通过BitmapFactory.decodeResource检索的位图,并且可以通过对其进行调用来进行更改bitmap.setPixels()。当我在运行Android 1.6的朋友的设备上进行测试时,我IllegalStateException接到的电话bitmap.setPixels。在线文档说,IllegalStateException当位图是不可变的时,从该方法抛出。该文档没有说明有关decodeResource返回不变位图的任何内容,但显然必须如此。

我是否可以进行另一个调用以从应用程序资源可靠地获取可变位图,而无需第二个Bitmap对象(我可以创建一个相同大小的可变位图并绘制到包装它的Canvas中,但是这需要两个相同大小的位图使用了两倍于我的预期内存)?


慕虎7371278
浏览 540回答 3
3回答

噜噜哒

使用可变选项true将位图复制到自身。这样既不需要额外的内存消耗,也不需要长代码行。Bitmap bitmap= BitmapFactory.decodeResource(....);bitmap= bitmap.copy(Bitmap.Config.ARGB_8888, true);

紫衣仙女

我们可以首先通过实例化BitmapFactory.Options类为BitmapFactory设置选项,然后将名为“ inMutable”的选项字段设置为true,然后将此选项实例传递给解码资源。 BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inMutable = true; Bitmap bp = BitmapFactory.decodeResource(getResources(), R.raw.white, opt);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android