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

时间:2012-09-06 16:41:46

标签: android

简单示例:

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

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

无论如何,如何在没有分配内存的情况下使用非2的2值来缩放位图?

P.S。我知道,使用2的幂要快得多,但在我的情况下时间并不是那么重要,我需要通过提供的比例缩放完全的图像(否则它会变得太大或者太小了) - 我正在处理图像处理,所以大图像本身不是一个问题(ImageView将其缩放到所需的大小),但是例如,应用一些过滤器需要额外的时间。

1 个答案:

答案 0 :(得分:2)

如果您阅读了inSampleSize的文档:

  

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

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