解码位图返回null

时间:2014-03-21 16:14:59

标签: android bitmap imageview

这似乎是Stackoverflow中的常见问题,大多数似乎是与this bug相关的错误。但是,我认为我的不同。我正在从内部存储加载我的图像,所以它不应该有导致上述错误的下载时间问题。

这是我用来用文件填充ImageView的一些精简代码。

Options opts = new Options();
opts.inSampleSize = 1;
opts.inPurgeable = true;
opts.inInputShareable = true;
opts.inTempStorage = new byte[32 * 1024];

Bitmap bm = null;
try {
    // Use BufferedInputStream to attempt to alleviate null bitmap errors. This is/used to be an [Android bug.
    bm = BitmapFactory.decodeStream(new BufferedInputStream(new FileInputStream(imageFile)), null, opts);
} catch (OutOfMemoryError e) {
    // File is probably too big, try down-sampling
} catch (FileNotFoundException e) {
    // The input File was not found
}

if(bm != null) {
    imageView.setImageBitmap(bm);
} else {
    // Give a warning
}

这适用于我的一些文件,而不适用于其他文件。我有uploaded the images I am testing with。我用GIMP预先存在的过滤器制作了所有3个。这些文件都没有给我OutOfMemory错误。

Image 1

  • 作品:是
  • ffprobe:Stream#0:0:视频:png,rgba,100x100
  • 大小:5816字节

Image 2

  • 作品:否
  • ffprobe:Stream#0:0:视频:png,rgba,200x200
  • 大小:48781字节

在logcat中收到:

  

D / skia(16422):------ png错误读取错误!

     

D / skia(16422):--- decoder-> decode返回false

Image 3

  • 作品:是
  • ffprobe:Stream#0:0:视频:png,rgb24,175x175
  • 大小:2589字节

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

 inSampleSize = 2;

或者你可以看看这个: BitmapFactory.decodeStream always returns null and skia decoder shows decode returned false

我认为尺寸是问题所在。