如何使用BitmapFactory.decodeByteArray()捕获“png错误”?

时间:2017-04-20 23:07:37

标签: android graphics error-handling png

我的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() > 0image.getByteCount() > 0image.getDensity() > 0,但是对于好的或坏的图像,它们都会评估为真。有没有办法抓住这个?

1 个答案:

答案 0 :(得分:0)

在不同的Android设备上确实是相同的接口bitmap = BitmapFactory.decodeFile(“XXX.png”);会返回不同的结果。例如,对于我上传(https://www.dropbox.com/s/vkhw44mtzut15zr/bad.png?dl=0)的损坏的png文件,通常移动设备会返回空位图,但Nexus 6P会返回非空位图,但您无法在应用程序上预览它。