我在我的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
仍然返回一个非NULL图像对象。然后setImageBitmap
显示一个空的(全黑(图像。
在这种情况下,我想简单地跳过显示图像,但是我找不到一种测试此错误的方法。除了image != null
外,我还尝试了测试image.getWidth() > 0
,image.getByteCount() > 0
和image.getDensity() > 0
,但它们都对好或坏的图像进行了评估。有没有办法抓住这个?
的确,在不同的android设备上,相同的接口bitmap = bitmapfactory.decodefile(" xxx.png"(;会返回不同的结果。例如,对于损坏的png文件,我上传(https://www.dropbox.com/s/vkhw444444444444444444444444444444444444444444444444444444444444MT.PNG?dl = 0(,通常,移动设备将返回一个空位图,但是Nexus 6p返回不空的butmap,但却不为空的bitmap,您无法在应用程序上预览它。