android – 如何解码样本大小不等于2的幂的位图?

简单的例子:

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

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

无论如何,如何在没有分配内存的情况下通过非二次幂值来缩放位图以获得完整的位图?

附:我知道,使用2的幂要快得多,但在我的情况下,时间并不是那么关键,我需要通过提供的比例精确缩放图像(不管它变得太大还是太小) – 我正在使用图像处理,如此大的图像本身不是一个问题(ImageView将其缩放到所需的大小),但是例如,应用一些过滤器需要额外的时间.

最佳答案 如果您阅读
inSampleSize的文档:

Note: the decoder will try to fulfill this request, but the resulting bitmap may have different dimensions that precisely what has been requested. Also, powers of 2 are often faster/easier for the decoder to honor.

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

点赞