0

我刚刚在我的 Android 应用程序中添加了对专辑封面的支持,我遇到了一个问题,即在布局中显示专辑封面会导致应用程序内存激增,并且最终会终止播放服务以释放内存。我相信问题是我将提取的专辑封面添加到布局中而不压缩它。这导致必须将大图像缓存在内存中。我用来制作位图的代码是:

byte [] blob = mCursor.getBlob(mCursor.getColumnIndexOrThrow(Media.MediaColumns.PICTURE));

if (blob != null) {
    return BitmapFactory.decodeByteArray(blob, 0, blob.length);
}

是否可以统一缩放/压缩这些位图以减少它们的内存占用。另外,有没有办法直接使用字节数组(而不是输入流)进行压缩。

4

1 回答 1

3

试试这个

Options opt = new Options();
        opt.inSampleSize = 2;
        if (blob != null) {
        return  BitmapFactory.decodeByteArray(blob, 0, length, opt)
          }

有关此的更多信息

public int inSampleSize
Added in API level 1

如果设置为大于 1 的值,则请求解码器对原始图像进行二次采样,返回较小的图像以节省内存。样本大小是对应于解码位图中的单个像素的任一维度中的像素数。例如, inSampleSize == 4 返回的图像是原始宽度/高度的 1/4,像素数的 1/16。任何 <= 1 的值都被视为 1。注意:解码器将尝试满足此请求,但生成的位图可能具有与所请求的尺寸不同的尺寸。此外,2 的幂通常更快/更容易让解码器兑现。

于 2012-12-08T17:56:31.757 回答