【问题标题】:load bitmaps efficiently, what is the roll of inSampleSize?有效地加载位图,inSampleSize 的作用是什么?
【发布时间】:2013-12-07 17:09:29
【问题描述】:

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

【问题讨论】:

    标签: android bitmap scale


    【解决方案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 的内存。

    【讨论】:

    • 它是做一些抗锯齿(例如,平均像素值)还是只为每 4 个像素挑选一个像素?
    • 我不确定算法是如何工作的,你必须检查源代码。
    【解决方案2】:

    请阅读inSampleSize的文档

    如果设置的值 > 1,则请求解码器对原始图像进行二次采样,返回较小的图像以节省内存。样本大小是对应于解码位图中的单个像素的任一维度中的像素数。例如,inSampleSize == 4 返回的图像是原始宽度/高度的 1/4,像素数的 1/16。任何

    如果我为此选择数字 1,这是否意味着如果我通常加载具有实际大小的位图?

    是的,1 表示没有二次抽样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多