gpt4 book ai didi

android - 解码bitmapfactory两次有什么用?

转载 作者:行者123 更新时间:2023-11-29 17:37:42 24 4
gpt4 key购买 nike

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

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 在内存管理方面相当困难,因此该系统允许您首先评估图像的大小,当您实际下载时,您可以控制所需的下采样量。

简而言之,下采样意味着您要跳过多少像素。例如,1 的下采样不会减少。然而,2 的下采样将在水平和垂直方向上每隔一个像素跳过一次,从而导致位图的宽度和高度分别为一半和四分之一的内存。

如果您查看这段代码:

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

这里发生的事情是在调用“decodeResource”时,您传递了一个 Options 对象,其中 inJustDecodeBounds = true。这是告诉 BitmapFactory 实际上不加载图像像素,而是只解码图像的边界 - 一个更便宜的操作。当你这样做时,BitmapFactory 的结果是 null,但是 Options 的参数(outWidth, outHeight)将具有描述图像宽度/高度的有效值。有了它,您可以计算出所需的样本大小,并最终下载实际图像,但其大小最适合您的应用。

关于android - 解码bitmapfactory两次有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com