【问题标题】:What is the use of decoding bitmapfactory twice?两次解码bitmapfactory有什么用?
【发布时间】:2015-04-29 11:41:33
【问题描述】:

我在开发者网站上的有效加载大型位图教程上看到了这一点。

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
    int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    **BitmapFactory.decodeResource(res, resId, options);**

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}

我的问题是第一次解码资源有什么意义,可以设置inSampleSize然后解码。

【问题讨论】:

    标签: android imageview bitmapfactory


    【解决方案1】:

    这是下载图片时常用的策略。

    由于您几乎不想下载分辨率高于显示分辨率的图像,并且由于 Android 在内存管理方面相当困难,因此该系统允许您首先评估图像的大小,当你实际下载时,你可以控制你想要的下采样量。

    下采样,简单地说,就是要跳过多少像素。例如,下采样 1 不会减少。然而,2 的下采样将在水平和垂直方向上跳过每隔一个像素,从而产生一半宽度和一半高度的位图,以及四分之一的内存。

    如果你看一下这段代码:

    final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        **BitmapFactory.decodeResource(res, resId, options);**
    

    这里发生的情况是,当调用“decodeResource”时,您传递了一个带有inJustDecodeBounds = trueOptions 对象。这告诉BitmapFactory 不实际加载图像像素,而是只解码图像的边界 - 一个便宜得多的操作。执行此操作时,BitmapFactory 的结果为null,但Options (outWidth, outHeight) 的参数将具有描述图像宽度/高度的有效值。有了这个,您可以计算出您想要的样本大小,并最终下载实际图像,但要使用最适合您的应用程序的大小。

    【讨论】:

      【解决方案2】:

      如果你在第一次解码时注意到他已经设置了

      options.inJustDecodeBounds = true;
      

      来自 api doc “如果设置为 true,解码器将返回 null(无位图),但 out... 字段仍将设置,允许调用者查询位图而无需为其像素分配内存。”

      http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inJustDecodeBounds

      使用此选项进行解码时,不会加载位图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-23
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多