gpt4 book ai didi

java - InputStream - 在什么时候下载数据

转载 作者:行者123 更新时间:2023-12-02 06:47:23 26 4
gpt4 key购买 nike

我有 4 行代码来下载位图,

URL u = new URL(webaddress);

InputStream in = null;

in = u.openStream();

icon = BitmapFactory.decodeStream(in);

我计划更改最后一行以执行类似的操作 tutorial我只将设定大小的图像加载到内存中以减少内存使用。但是我不希望这涉及另一个服务器调用/下载,所以我很好奇上面四行中的哪一行实际上从源下载数据?

我将把最后一行代码更改为上面提到的教程中的最后两个函数,这样可以知道它是否意味着下载更多或更少的数据,(我试图只下载一个小图像例如 5 兆像素)

抱歉,如果这很简单/思考它的方式错误,我对数据流不是很有经验。

<小时/>

编辑

我使用这两个函数来替换上面的最后一行代码:调用:

image = decodeSampledBitmapFromStram(in, 300,300);

图像质量不是优先考虑的问题,这是否意味着下载更多数据?

private static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {

// Calculate ratios of height and width to requested height and
// width
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);

// Choose the smallest ratio as inSampleSize value, this will
// guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}

return inSampleSize;
}

private Bitmap decodeSampledBitmapFromStream(InputStream in, int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Rect padding = new Rect();
BitmapFactory.decodeStream(in, padding, options);

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

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;

return BitmapFactory.decodeStream(in, padding, options);
}

最佳答案

四行中的最后一行负责整个下载。 BitmapFactory.decodeStream(in); 将继续从该流中提取数据,直到整个图像下载完毕或中途发生错误。

至于带宽问题,在尝试之前我会非常仔细地了解解码器如何对大图像进行下采样。将大图像缩小为较小尺寸时,以高质量方式实现此目的的唯一方法是通过对原始图像中的像素进行平均来进行下采样。如果解码器以这种方式进行下采样,那么您将不会节省任何带宽,因为解码器仍然需要读取原始图像的每个像素,即使不是每个像素都存储在 RAM 中。您可以通过不读取原始图像中的每个像素来更快地进行下采样,但代价是最终图像质量。沿着这些思路,我确实注意到了一个更喜欢“质量而不是速度”的选项:

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

我有一种感觉,对于这个特定的选项,您可以通过读取更少的数据来获得更快的速度,但 API 声明这仅适用于 JPEG。不确定这是否对您的特定用例有帮助,但可能值得研究。

关于java - InputStream - 在什么时候下载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473862/

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