【发布时间】:2013-12-07 17:09:29
【问题描述】:
我正在阅读一篇关于如何有效加载位图here 的文章。它曾建议使用一些技术来加载具有需要大小而不是实际大小的位图。唯一的问题是我没有得到 inSampleSize 变量的作用(它必须是 2 的幂)。如果我为此选择数字 1,这是否意味着如果我通常加载具有实际大小的位图?
【问题讨论】:
我正在阅读一篇关于如何有效加载位图here 的文章。它曾建议使用一些技术来加载具有需要大小而不是实际大小的位图。唯一的问题是我没有得到 inSampleSize 变量的作用(它必须是 2 的幂)。如果我为此选择数字 1,这是否意味着如果我通常加载具有实际大小的位图?
【问题讨论】:
Rajesh 引用了文档中关于 inSampleSize 所做的解释;这个解释可以用图表来扩展。
重要的部分是:
样本大小是对应于解码位图中单个像素的任一维度中的像素数。
所以,如果我们有这张图片(每个字母代表一个像素):
AAAABBBB
AAAABBBB
AAAABBBB
AAAABBBB
CCCCDDDD
CCCCDDDD
CCCCDDDD
CCCCDDDD
我们设置inSampleSize = 2,我们会得到一个解码后的位图,如下所示:
AABB
AABB
CCDD
CCDD
即原始图像(AA)中的 2 个像素对应解码图像中的 1 个像素(A)。
如果我们设置inSampleSize = 4,我们将得到一个如下所示的解码位图:
AB
CD
即原始图像中的4个像素对应解码图像中的1个像素。
请注意,inSampleSize 为 2 有效地将垂直和水平分辨率减半,但使用了 1/4 的像素 - 因此只有 1/4 的内存。
【讨论】:
请阅读inSampleSize的文档
如果设置的值 > 1,则请求解码器对原始图像进行二次采样,返回较小的图像以节省内存。样本大小是对应于解码位图中的单个像素的任一维度中的像素数。例如,inSampleSize == 4 返回的图像是原始宽度/高度的 1/4,像素数的 1/16。任何
如果我为此选择数字 1,这是否意味着如果我通常加载具有实际大小的位图?
是的,1 表示没有二次抽样。
【讨论】: