4

简单的例子:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = scale;
Bitmap bmp = BitmapFactory.decodeStream(is, null, opts);

当我传递scale的值不等于 2 的幂时,位图仍按最接近的 2 值的幂进行缩放。例如,如果由于某种原因,scale = 3实际比例变为。2也许是因为我正在使用硬件加速?

无论如何,如何在不为完整位图分配内存的情况下通过非 2 次方值缩放位图?

PS我知道,使用二的幂要快得多,但在我的情况下,时间并不是那么重要,我需要按提供的比例精确缩放图像(否则它变得太大或太小) - 我正在使用图像处理,所以大图像本身不是这样的问题(ImageView将其缩放到所需的大小),但是例如应用一些过滤器需要额外的时间。

4

1 回答 1

2

如果您阅读以下文档inSampleSize

注意:解码器将尝试满足此请求,但生成的位图可能具有与所请求的尺寸不同的尺寸。此外,2 的幂通常更快/更容易让解码器兑现。

您不能保证确切的尺寸。由于内存听起来像是一个问题,我会使用您当前的方法使图像大于您需要的图像,但比源图像更适合您的内存要求。然后使用不同的方法,比如Bitmap.createScaledBitmap让它达到你的确切尺寸。

于 2012-09-06T17:10:32.377 回答