有效加载位图,inSampleSize的内容是什么?

时间:2013-12-07 08:50:36

标签: android bitmap scale

我正在阅读一篇关于如何有效加载位图的文章 here。它建议使用一些技术加载位图,其大小需要而不是实际大小。唯一的事情是我没有得到inSampleSize变量的作用(必须是2的幂)。如果我选择数字1,这是否意味着如果我正常加载一个真实大小的位图?

2 个答案:

答案 0 :(得分:3)

Rajesh引用了inSampleSize所做的文件中的解释;该解释可以用图表进行扩展。

重要的部分是:

  

样本大小是任一维度中与解码位图中的单个像素对应的像素数。

所以,如果我们有这个图像(每个字母代表一个像素):

AAAABBBB
AAAABBBB
AAAABBBB
AAAABBBB
CCCCDDDD
CCCCDDDD
CCCCDDDD
CCCCDDDD

我们设置inSampleSize = 2,我们会得到一个如下所示的解码位图:

AABB
AABB
CCDD
CCDD

也就是说,原始图像中的2个像素(AA)对应于解码图像中的1个像素(A)。

如果我们设置inSampleSize = 4,我们会得到一个如下所示的解码位图:

AB
CD

即,原始图像中的4个像素对应于解码图像中的1个像素。

注意,{2}的inSampleSize有效地将垂直和水平分辨率减半,但使用1/4的像素 - 因此只有1/4的内存。

答案 1 :(得分:1)

请阅读inSampleSize

的文档
  

如果设置为值>如图1所示,请求解码器对原始图像进行二次采样,返回较小的图像以节省存储器。样本大小是任一维度中对应于解码位图中的单个像素的像素数。例如,inSampleSize == 4返回的图像是原始宽度/高度的1/4,像素数量的1/16。任何值< = 1都被视为1.注意:解码器使用基于2的幂的最终值,任何其他值将向下舍入到最接近的2的幂。

如果我选择数字1,这是否意味着如果我正常加载一个具有实际尺寸的位图?

是的,1表示没有子采样。