【问题标题】:Android media thumbnails. Serious issues?Android 媒体缩略图。严重的问题?
【发布时间】:2011-02-23 12:56:31
【问题描述】:

我玩 android 的缩略图已经有一段时间了,我看到了一些让我想尖叫的不一致之处。我的目标是创建一个包含缩略图和文件名的所有图像的简单列表(以及一个单独的视频列表)。

设备:HTC Evo(来自 Google I/o 的新品)

首先: http://androidsamples.blogspot.com/2009/06/how-to-display-thumbnails-of-images.html

该代码似乎根本不起作用,缩略图是重复的……有些带有“镜像”效果,有些没有。还有一些不会加载,只会显示一个黑色方块。我尝试通过从 SD 卡中删除“alblum thumbs”目录来重建缩略图。 HTC 的图库应用程序似乎一切正常。

这种方法似乎有效:

Bitmap thumb = MediaStore.Images.Thumbnails.getThumbnail(
    getContentResolver(),
    id, MediaStore.Video.Thumbnails.MICRO_KIND, null);
imageView.setImageBitmap(curThumb);

其中 id 是 original 图像 id,imageView 是一些图像视图。这很棒!但是,奇怪的是,在 SimpleViewBinder 中使用太慢了。下一个方法:

String [] proj = {MediaStore.Images.Thumbnails._ID};
Cursor c = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
    proj, MediaStore.Images.Thumbnails.IMAGE_ID + "=" +id ,
    null, null);

if (c != null && c.moveToFirst()) {
    Uri thumb = Uri.withAppendedPath(mThumbUri,c.getLong(0)+"");
    imageView.setImageURI(thumb);
}

我应该解释一下,我认为需要 WHERE 条件,因为似乎无法保证您的 uri 对于缩略图及其父图像具有相同的 ID。这适用于所有当前图像,但是一旦我开始使用相机添加图片,它们就会显示为空白!调试显示一个可怕的:

SkImageDecoder::Factory returned null

错误并且 URI 作为无效返回。这些与之前调用的图像相同。谁能抓住我的逻辑错误或指出一些工作代码?

【问题讨论】:

  • 我采用第一种方法并使用线程来实际加载缩略图。不过,Uri 方法要快得多……可惜我无法弄清楚!

标签: android media thumbnails


【解决方案1】:

您可以通过查询 MediaStore.Images.Media._ID 而不是缩略图的内容提供者来解决您的问题

【讨论】:

    【解决方案2】:

    根据我的经验,缩略图内容提供程序将返回内容 URI 和图像文件路径,即使该缩略图尚未创建。如果缩略图不存在,MediaStore.Images.Thumbnails.getThumbnail() 调用将实际创建缩略图(并将其放在内容 URI 已指向的位置)。这在文档中对我来说并不清楚,但似乎是正在发生的事情。

    【讨论】:

    • 图像文件注册到数据库后返回uri,它只会在后台提取缩略图。如果您调用 MediaStore.images.thumbnails.getThumbnail() 并且缩略图尚未完成,它将尝试直接从文件中提取缩略图,而不是从数据库中提取。
    【解决方案3】:

    加载视频缩略图,其中 mThumbButton 是 ImageButton:

    public void loadThumb(int videoId)
        {
            String [] proj = {MediaStore.Video.Thumbnails._ID};
            Cursor c = managedQuery(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
                proj, MediaStore.Video.Thumbnails.VIDEO_ID + "=" +videoId ,
                null, null);
    
            if (c != null && c.moveToFirst()) {
                Uri thumb = Uri.withAppendedPath(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,c.getLong(0)+"");
                mThumbButton.setImageURI(thumb);
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 2012-09-20
      • 2014-08-11
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      相关资源
      最近更新 更多