在 Android 中为专辑封面提供有效的位图缩放



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

byte [] blob = mCursor.getBlob(mCursor.getColumnIndexOrThrow(Media.MediaColumns.PICTURE));
if (blob != null) {
    return BitmapFactory.decodeByteArray(blob, 0, blob.length);
}

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

试试这个

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 的幂通常更快/更容易让解码器遵守。

最新更新