我的Android应用中有这种方法:
public void displayImage(ByteArrayOutputStream pngData) {
if (pngData != null) {
Bitmap image = BitmapFactory.decodeByteArray(pngData.toByteArray(), 0, pngData.size()); // even when this generates a log error...
if (image != null) { // ...this still evaluates true
this.imageView.setImageBitmap(image); // ...and then this displays an all-black image
}
}
}
有时,decodeByteArray
失败,并且D/skia: ------ png error bad adaptive filter value
出现在控制台中。但是,decodeByteArray
仍会返回非空图像对象。然后setImageBitmap
显示一个空的(全黑)图像。
我想在这种情况下简单地跳过显示图像,但我找不到测试此错误的方法。除了image != null
之外,我还尝试过测试image.getWidth() > 0
,image.getByteCount() > 0
和image.getDensity() > 0
,但是对于好的或坏的图像,它们都会评估为真。有没有办法抓住这个?
答案 0 :(得分:0)
在不同的Android设备上确实是相同的接口bitmap = BitmapFactory.decodeFile(“XXX.png”);会返回不同的结果。例如,对于我上传(https://www.dropbox.com/s/vkhw44mtzut15zr/bad.png?dl=0)的损坏的png文件,通常移动设备会返回空位图,但Nexus 6P会返回非空位图,但您无法在应用程序上预览它。