【问题标题】:Android - ThumbnailUtils.getThumbnail returns wrong imageAndroid - ThumbnailUtils.getThumbnail 返回错误的图像
【发布时间】:2016-11-15 10:28:06
【问题描述】:

构建图片库我遇到了一个奇怪的问题。我这样查询相册的图片:

String sortBy=MediaStore.Images.Media.DATE_MODIFIED+" desc";
String selection=MediaStore.Images.Media.DATA +" like?";    
String[] selectionArgs=new String[]{"%"+folderPath+"%"};
String[] projection = {MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA,MediaStore.Images.Media.DATE_MODIFIED,MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query( uri, projection,  selection, selectionArgs, sortBy); 

之后,我开始收集从查询中获得的所有 id 的图像。我获取特定图像 ID 的位图,如下所示:

Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail( contentResolver, imageId, MediaStore.Images.Thumbnails.MICRO_KIND, null);

在大多数设备上都可以正常工作。今天我测试了一款小米红米 3 设备,它返回的缩略图几乎总是相同的。所以如果一个相册有 200 张图片,我会得到一两张正确的图片,其余的都是完全相同的图片。

但是,如果我请求 MINI_KIND 缩略图,它们都可以正常返回。

这是什么原因造成的,我该如何解决?

【问题讨论】:

  • 在运行 CyanogenMod 14.1(夜间构建)的 Nexus 5 上出现同样的问题。
  • 我猜这是一个无法避免的错误,所以我使用了 MINI_KIND 并在之后以 MICRO_KIND 大小调整了位图的大小
  • 不幸的是,MINI_KIND 慢得多。如果获取 MICRO_KIND 缩略图会导致错误,那就太好了,所以我可以先尝试一下,然后仅在必要时加载 MINI_KIND 缩略图。

标签: android thumbnails


【解决方案1】:

我找到了解决我们问题的方法:

大缩略图 (MINI_KIND) 存储在 DCIM/.thumbnails/*.jpg 中。 小缩略图 (MICRO_KIND) 存储在 DCIM/.thumbnails/.thumbdata* 和 .thumbindex* 中。因此,在我删除以.thumbdata 和.thumbindex 开头的文件后,我的应用程序可以检索到正确的MICRO_KIND 缩略图。第一次很慢,因为必须再次创建缩略图。显然旧的缩略图文件已损坏。

【讨论】:

  • 是的,我知道..但如果用户必须手动删除该文件夹,这不是一个解决方案。顺便说一下,默认图库应用程序和一些下载的图库应用程序显示正确的缩略图。如果不使用 MINI_KIND...,我看不到任何其他方法可以做到这一点
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
相关资源
最近更新 更多