gpt4 book ai didi

java - 使用 Universal Image Loader,内存缓存中的图像大小高于实际大小

转载 作者:行者123 更新时间:2023-11-29 21:53:10 46 4
gpt4 key购买 nike

我的应用程序有带有图像的 ListView。它使用 Universal Image Loader (1.7.0) 从 Internet 加载图像。

配置和显示选项:

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(defaultOptions)
.threadPoolSize(2)
.enableLogging()
.build();

getView() 的一部分(我的应用重用了 ConvertView 并使用了 ViewHolder 模式):

View rowView = convertView;

ViewHolder holder;

if (rowView == null) {
LayoutInflater inflater = activity.getLayoutInflater();
rowView = inflater.inflate(R.layout.list_row, null, true);
holder = new ViewHolder();
holder.photoView = (ImageView) rowView.findViewById(R.id.list_photo_view);

rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
String photoUrl = "http://someserver.com/some_image.jpg";
mImageLoader.displayImage(photoUrl, holder.photoView);

list_row.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:clickable="true" >

<ImageView
android:id="@+id/list_photo_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="false"
android:contentDescription="@string/photo"
android:scaleType="centerInside"
android:src="@drawable/template_image_list" />

</LinearLayout>

当然,ImageView 不是每一行中的单个 View 。这是简短的版本:)。所以我从互联网上下载的图像尺寸是 450x337。我正在屏幕尺寸为 1280x760 的平板电脑上测试我的应用程序。

当我启用日志记录时 - 我看到这样的消息:

Load image from memory cache [http://someserver.com/some_image.jpg_1280x736]

等等...我对 url 结尾有点困惑 - “_1280x736”。作为second part of manual说:

• maxImageWidthForMemoryCache() and maxImageHeightForMemoryCache() is used for decoding images into Bitmap objects. In order not to store a full-sized image in the memory, it is reduced to a size determined from the values of ImageView parameters, where the image is loaded: maxWidth and maxHeight (first stage), layout_width and layout_height (second stage). If these parameters are not defined (values fill_parent and wrap_content are considered as uncertain), then dimensions specified by settings maxImageWidthForMemoryCache() and maxImageHeightForMemoryCache() are taken. The size of the original image is reduced by 2 times (recommended for fast decoding), till the width or height becomes less than the specified values; o Default values - size of the device’s screen.

所以,据我所知,这个结尾是“减少”后内存缓存中图像的大小:) 并且图像加载器使用了默认值(屏幕大小)。我对图像加载器无法获取 ImageView 的大小(可能为时过早)并不感到惊讶,但为什么原始图像被放大了?是否难以验证原始图像的大小并保持原样不变?当然,我可以将图像大小添加到 displayImage 方法,但我需要解释...

最佳答案

好详细的问题。

URL 结尾,如"_1280x736",并不表示结果位图的大小。它是原始图像要缩小到的目标大小。在您的情况下,它等于设备屏幕尺寸和原始图像(小于此目标尺寸)不会缩放(直到您在显示选项中设置 ImageScaleType.EXACTLY_STRETCHED)。

所以不用担心。如果您在运行时看到真实的位图大小,那么您将看到原始图像大小(不是 1280x736)。

关于java - 使用 Universal Image Loader,内存缓存中的图像大小高于实际大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916816/

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