【问题标题】:MediaStore Image width and height nullMediaStore 图片宽高 null
【发布时间】:2016-09-12 16:22:26
【问题描述】:

当我在 MediaStore 中爬行时,有些图像的身高和体重条目为空。

文件存在,我可以用图像浏览器显示它们。

Cursor mCursor = _context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Images.Media.DEFAULT_SORT_ORDER);
if(mCursor != null){
    mCursor.moveToFirst();
    while(!mCursor.isAfterLast()) {
            Log.d("DEBUG","PIC PATH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
            Log.d("DEBUG","WIDTH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.WIDTH)));
            Log.d("DEBUG","HEGHT: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)));
        mCursor.moveToNext();
    }
    mCursor.close();
}

09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG:图片路径: /storage/emulated/0/Pictures/Instagram/IMG_20160813_221335.jpg

09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: 宽度: 空

09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: HEGHT: 空

文件的尺寸为:3366*2988,我可以在文件浏览器中打开它。

编辑

我尝试使用列(请参阅 Pavneet Singh 的回答),但同样的错误。大部分图片有效,只有少数有这个问题:

final String[] columns = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.WIDTH, MediaStore.Images.Media.HEIGHT, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.SIZE};
Cursor mCursor = _context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,columns,null,null,MediaStore.Images.Media.DEFAULT_SORT_ORDER);
if(mCursor != null){
    mCursor.moveToFirst();
    while(!mCursor.isAfterLast()) {
            Log.d("DEBUG","PIC PATH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
            Log.d("DEBUG","WIDTH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.WIDTH)));
            Log.d("DEBUG","HEGHT: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)));
        mCursor.moveToNext();
    }
    mCursor.close();
}

【问题讨论】:

  • 能认出并告诉我那几张没有高度和宽度的图片是从您的手机拍摄的,还是您从某个地方下载的?因为如果媒体商店有信息,那么它肯定会给你最喜欢的图片,否则看起来你的少数图片没有你需要的细节
  • 示例图片来自我的 instagram 文件夹。当我使用文件资源管理器(ES 文件资源管理器)查看图片中的详细信息时,它会显示宽度和高度。当媒体存储无法获取信息时,唯一的解决方案是使用 BitmapFactory 还是?
  • 是的,另一种方法bitmapfactory,但显然还有一些额外的处理,就像我说导致问题的图像是来自外部的外星人,尝试更新答案中的链接,将指导:p

标签: android mediastore


【解决方案1】:

MediaStore 由于性能原因,docs 不会自动返回所有列值,因此您需要将投影显式传递给 MediaStore 查询。

final String[] columns = {
    MediaStore.Images.Media.DATA,
    MediaStore.Images.Media.WIDTH,
    MediaStore.Images.Media.HEIGHT
    };


Cursor mCursor = _context.getContentResolver().
                     query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                          columns,null,null,
                          MediaStore.Images.Media.DEFAULT_SORT_ORDER);

有些人觉得它令人困惑,但它提高了性能,因为可能有太多与图像相关的细节,如日期、时间、标题、地点、纬度、经度等,如果查询是针对所有存储的图像,则会降低性能(通常它可以是数千张图像),因此数据更少,时间更短,因此性能更好。

详细信息:有些图片可能没有所需的信息,可能来自其他应用或从某个网站等下载,因此请使用更新信息。

更新:您可以按照this 方法处理您的一些有问题的图像

【讨论】:

  • 为什么将 MediaStore 用于 DATA 参数以及宽度和高度字符串?
  • 这是标准格式,因为列名需要像这样给出,考虑像select stu_name,stu_class from tbl_student这样的常规sql查询
  • 它们应该可以正常工作,否则具有相同字符串值的其他常量也可以正常工作,我不在 IDE 上,所以这对我来说有点快:p,让我编辑答案
  • 该解决方案对我不起作用我添加了列(请参阅我的问题中的编辑),但有些图片的宽度和高度为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 2012-12-30
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
相关资源
最近更新 更多