【问题标题】:How to load image (from sdcard) faster in thumbnail size?如何以缩略图大小更快地加载图像(来自 sdcard)?
【发布时间】:2013-05-24 12:42:45
【问题描述】:

我想制作一个网格视图来显示 sdcard 文件夹中照片的缩略图。 图像分辨率为 3264x2448。我使用带有配置的 Notras 通用图像加载器库:

DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showStubImage(R.drawable.stub)
            .showImageForEmptyUri(R.drawable.stub)
            .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
            .showImageOnFail(R.drawable.ic_launcher).cacheInMemory()
            .cacheOnDisc().bitmapConfig(Bitmap.Config.RGB_565).build();

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            context).defaultDisplayImageOptions(options).build();

还有我的自定义适配器中的 getView():

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    final ImageView imageView;
    if (convertView == null) {
        imageView = (ImageView) mInflater.inflate(R.layout.grid_item,
                parent, false);
    } else {
        imageView = (ImageView) convertView;
    }

    mImageLoader.displayImage(mListData.get(position), imageView, options);

    return imageView;
}

但它加载图像太慢了。 所以请帮助我更快地加载缩略图。我不想显示高质量的图像,我只想快速显示。

提前致谢。

UIL 版本:1.8.4 测试的安卓版本:2.3.3

【问题讨论】:

  • 使用查看器来实现平滑滚动和性能。 developer.android.com/training/improving-layouts/…
  • @Raghunandan 因为我的项目布局只包含一个 ImageView 所以我不使用 ViewHolder,我认为这不会使图像加载速度变慢。
  • @VAdaihiep 你能告诉我如何在通用图像加载器中加载 sdcard 图像,我试过但错误显示,如 UIL 默认不支持方案(协议)[/mnt/sdcard/images/ Adhisayam_2012/DSC_0122.jpg]。你应该自己实现这个支持(BaseImageDownloader.getStreamFromOtherSource(...))请帮帮我..
  • 使用很简单:universalImageLoader.displayImage(imageUri, imageView);我认为您的 imageUri 开头没有“file://”。它应该是 file://mnt/sdcard/images/Adhisayam_2012/DSC_0122.jpg

标签: android gridview gallery universal-image-loader


【解决方案1】:

尝试在配置中使用.discCacheExtraOptions(800, 800, CompressFormat.PNG, 0)。您可以根据设备的最大尺寸改变值“800”。

【讨论】:

  • cacheInMemory() 和 cacheOnDisc() 方法已弃用 .. 那么如何执行缓存??
【解决方案2】:

您可以使用它来获取缩略图:

Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(
                         getContentResolver(), selectedImageUri,
                         MediaStore.Images.Thumbnails.MINI_KIND,
                         (BitmapFactory.Options) null );

有两种类型的缩略图可用: MINI_KIND:512 x 384 缩略图 MICRO_KIND:96 x 96 缩略图

或者使用具有几乎相同参数的 queryMiniThumbnail 来获取缩略图的路径。

Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(
                         getContentResolver(), selectedImageUri,
                         MediaStore.Images.Thumbnails.MINI_KIND,
                         null );
if( cursor != null && cursor.getCount() > 0 ) {
 cursor.moveToFirst();//**EDIT**
 String uri = cursor.getString( cursor.getColumnIndex( MediaStore.Images.Thumbnails.DATA ) );
}

您可以在 imageloader 中使用此 uri 来查看缩略图

Reference and detailed description

【讨论】:

  • 谢谢,我只是试了一下,但是 selectedImageUri 是一个字符串,但是这个方法需要一个长类型的 id。有什么建议吗?
  • mImageLoader.displayImage(uri, imageView, options); 这里 uri 是 Image URI(即它可以是 web url 或 "file:///mnt/sdcard/image .png").
  • 哪种方法实际上需要long类型的id?请解释
  • 我的意思是 selectedImageURI 在这里:Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail( getContentResolver(), selectedImageUri, MediaStore.Images.Thumbnails.MINI_KIND, null );它可以是 long 或 Uri,但我不知道如何从文件路径中获取 Uri,例如 /mnt/sdcard/ABC.JPG?
  • 你也可以给 uri 而不是 long id。 public static final Cursor queryMiniThumbnails (ContentResolver cr, Uri uri, int kind, String[] 投影)
猜你喜欢
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 2016-10-24
  • 1970-01-01
  • 2019-01-03
  • 2015-07-16
相关资源
最近更新 更多