Android 如何解码样本大小不等于2次方的位图?

Android 如何解码样本大小不等于2次方的位图?,android,Android,简单的例子: BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = scale; Bitmap bmp = BitmapFactory.decodeStream(is, null, opts); 当我传递的scale值不等于2的幂时,位图仍按最接近的2的幂进行缩放。例如,如果scale=3,则由于某种原因,实际比例变为2。也许是因为我在使用硬件加速 无论如何,在没有为完整位图分配内存的情况下,

简单的例子:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = scale;
Bitmap bmp = BitmapFactory.decodeStream(is, null, opts);
当我传递的
scale
值不等于2的幂时,位图仍按最接近的2的幂进行缩放。例如,如果
scale=3
,则由于某种原因,实际比例变为
2
。也许是因为我在使用硬件加速

无论如何,在没有为完整位图分配内存的情况下,如何按非2次方值缩放位图


另外,我知道,使用二次幂要快得多,但在我的情况下,时间并不是那么关键,我需要按照提供的比例准确地缩放图像(否则图像会变得太大或太小)-我正在处理图像,所以大图像本身并不是一个问题(
ImageView
将其缩放到所需的大小),但应用某些过滤器需要额外的时间。例如,如果您阅读以下文档:

注意:解码器将尝试满足此请求,但生成的位图可能具有不同的尺寸,而这些尺寸正是请求的尺寸。此外,2的幂通常更快/更容易让解码器接受

您不能保证精确的尺寸。由于内存听起来像是一个问题,我将使用您当前的方法使图像比您需要的更大,但比源图像更适合您的内存要求。然后使用另一种方法,如将其精确到您的尺寸