【问题标题】:bitmap size exceeds VM budget in android位图大小超出 android 中的 VM 预算
【发布时间】:2011-05-25 22:58:16
【问题描述】:

得到这个

05-25 23:55:59.145: ERROR/AndroidRuntime(3257): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

在我的这段代码中 -

Bitmap cs = null;

    cs = Bitmap.createBitmap(frameImg.getWidth(), frameImg.getHeight(), Bitmap.Config.ARGB_8888);

在活动课上。如何解决这个问题:(

【问题讨论】:

  • 那么,frameImg 有多大?如果它很大,那么你需要想出一个更好的方法来做你正在做的任何事情......

标签: android


【解决方案1】:

从我的 EVO 中选择图像时,我遇到了类似的问题......从 SD 卡上。相机以超过 1MB 的大小保存这些图像,在某些情况下接近 3MB。讽刺的是,Intent 在“拍照”时发送给你的位图大小只有 40 Kb 左右。

我想出的解决方案是:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;    // this will cut the sampling by 50%
Bitmap bitmap = BitmapFactory.decodeFile( imageFilePath, options );

通过增加因子数,我能够拍照并将它们减少到 100 Kb 以下,并且图像质量仍然相当不错。

这里的底线是它防止了 OOME 错误,从而防止我通过超出堆分配来破坏 JVM。简单 - 有效。

您可能还会发现这是一个有趣的阅读:BitmapFactory OOM driving me nuts

【讨论】:

  • 我向人们解释它的方式是“就像读一本书,你跳过了每一行......你仍然了解故事的本质,但你在过程中放弃了一些细节。 "
【解决方案2】:

使位图的分辨率更小,并可能使用不同的文件格式..

【讨论】:

    【解决方案3】:

    如果图片真的很大,那么你应该just display the parts you need

    【讨论】:

      【解决方案4】:

      Android 用于位图的备用内存量相对有限(根据设备中的其他情况,可能会变得更小)。所以其他答案都是正确的……

      • 缩小位图(以像素或分辨率为单位)
      • 仅显示用户可见的位图子集。

      查看Displaying a bitmap of arbitrary size without running out of memory 了解幕后发生的事情的背景 - 这可能会帮助您避免 OOM。

      【讨论】:

        【解决方案5】:

        嗨@user418366我在处理图像时遇到了同样的问题你可以做的是如果你使用模拟器你可以增加最大VM应用程序堆大小以便你可以覆盖这个问题或者按照所有人都尝试压缩图像的大小,确保它是减少损失的压缩

        【讨论】:

          猜你喜欢
          • 2012-08-19
          • 2010-12-07
          • 2010-12-29
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          相关资源
          最近更新 更多