我刚刚在我的Android应用程序中添加了对专辑封面的支持,我遇到了一个问题,即在布局中显示专辑封面会导致应用程序内存出现峰值,并最终终止播放服务以释放内存。我相信问题在于我将提取的专辑封面添加到布局而不压缩它。这导致必须将大图像高速缓存在存储器中。我用来制作Bitmap的代码是:
byte [] blob = mCursor.getBlob(mCursor.getColumnIndexOrThrow(Media.MediaColumns.PICTURE));
if (blob != null) {
return BitmapFactory.decodeByteArray(blob, 0, blob.length);
}
是否可以统一缩放/压缩这些位图以减少其内存占用。还有,有没有办法直接使用字节数组(而不是输入流)进行压缩。
答案 0 :(得分: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的幂通常更快/更容易让解码器兑现。