java–Android BitmapFactory.decodeResource需要太多内存

java–Android BitmapFactory.decodeResource需要太多内存,第1张

概述我有关于从资源加载Bitmap的问题.我的代码:publicvoidonClick(Viewview){if(mainButton==view){Bitmapbm=BitmapFactory.decodeResource(getResources(),R.drawable.test);}}test.jpg图像分辨率为3288x4936px.它是jpeg(未压缩时为3,9MB/48,

我有关于从资源加载Bitmap的问题.我的代码:

public voID onClick(VIEw vIEw) {    if (mainbutton == vIEw) {        Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test);    }}

test.jpg图像分辨率为3288 x 4936px.它是jpeg(未压缩时为3,9MB / 48,7MB).虽然此功能有效(在我的Nexus 7 2013设备上),但会发生以下异常:

java.lang.OutOfMemoryError: Failed to allocate a 259673100 byte allocation with 5222644 free bytes and 184MB until OOM        at dalvik.system.vmruntime.newNonMovableArray(Native Method)        at androID.graphics.BitmapFactory.nativeDecodeAsset(Native Method)        at androID.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)        at androID.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)        at androID.graphics.BitmapFactory.decodeResource(BitmapFactory.java:467)        at androID.graphics.BitmapFactory.decodeResource(BitmapFactory.java:497)        at pl.jaskol.androIDtest.MainActivity.onClick(MainActivity.java:50)        at androID.vIEw.VIEw.performClick(VIEw.java:4756)        at androID.vIEw.VIEw$PerformClick.run(VIEw.java:19749)        at androID.os.Handler.handleCallback(Handler.java:739)        at androID.os.Handler.dispatchMessage(Handler.java:95)        at androID.os.Looper.loop(Looper.java:135)        at androID.app.ActivityThread.main(ActivityThread.java:5221)        at java.lang.reflect.Method.invoke(Native Method)        at java.lang.reflect.Method.invoke(Method.java:372)        at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:694)

为什么应用程序尝试分配多达248MB?
我在Qt for AndroID中编写了类似的应用程序,在资源中使用相同的图像并且工作正常.

编辑:

>我无法调整大小.
>这是一个非常简单的应用程序,比如hello world.它没有别的,只是从资源加载位图.

EDIT2:

吉姆的解决方案适合我.但还有另一个问题.在位图加载后,它是4倍太大(2倍高度和2倍宽度).我尝试了各种图像,包括在Pinta或Gimp中创建的新图像.

解决方法:

您可以在AndroIDManifest.xml文件中的应用程序标记上使用androID:largeHeap =“true”来超过64MB限制.这不适用于3.0之前的设备.

这可能会解决你的问题.如果仍然不够,您可以使用本机代码加载位图,其中堆限制是设备上的完整内存. NDK更加复杂,所以首先尝试上述解决方案.

总结

以上是内存溢出为你收集整理的java – Android BitmapFactory.decodeResource需要太多内存全部内容,希望文章能够帮你解决java – Android BitmapFactory.decodeResource需要太多内存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115694.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存