【问题标题】:How to catch "png error" with BitmapFactory.decodeByteArray()?如何使用 BitmapFactory.decodeByteArray() 捕获“png 错误”?
【发布时间】:2017-09-17 18:49:10
【问题描述】:

我的 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,但对于图像的好坏,它们都评估为true。有没有办法捕捉到这个?

【问题讨论】:

    标签: android graphics error-handling png


    【解决方案1】:

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

    【讨论】:

    • 观察力不错。我在搭载 Android 7 的 Pixel C 上看到了 bad adaptive filter value 错误,但同样的数据在搭载 Android 5 的 Nexus 10 上触发了decode returned false,并且位图图像为空,正如我所料。
    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2018-01-08
    • 2018-02-11
    • 2016-04-12
    相关资源
    最近更新 更多