MediaStore图像宽度和高度为null

时间:2016-09-12 16:22:26

标签: android mediastore

当我浏览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:PIC PATH:   /storage/emulated/0/Pictures/Instagram/IMG_20160813_221335.jpg

     

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

     

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();
}

1 个答案:

答案 0 :(得分:1)

由于[{3}}中提到的性能原因,

MediaStore不会自动返回所有列值,因此您需要明确地将投影传递给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);

有些人觉得它很混乱,但它增强了性能,因为可能有太多与日期,时间,标题,地点,纬度,经度等图像相关的细节,如果查询是针对所有存储的图像,会降低性能(通常情况下,它可以是数千个图像,因此数据更少,时间更少,因此性能更佳。

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

更新:您可以按照docs方法处理几张有问题的图片