BitmapFactory.decodeFile 加载失败 在部分安卓机器的BUG

通常我们加载SD卡图片 使用安卓API BitmapFactory.decodeFile  、decodeStream  这些,通常不会遇到什么其他问题;
但是今天运营部门保障了,说某个广告图不能加载出来,然后我去定位问题,查看本地SD卡里面的图片,用手机相册看到图片不能正常展示,大小偏小,怀疑下载不完整,于是看了代码,发现看不出问题,然后把图片导出到MAC 查看,居然可以查看,突然蒙了,大小不一样是不同系统的算法导致。对于图片本来就不熟悉,然后就怀疑格式问题,我们的加载对于某些格式不对,然后看了加载代码,发现最终是调用API而已,我勒个擦了,难到BUG,于是顺着源码找了一下,各个decode 方法都是分别对应几个不同的本地C 实现方法,于是轮流实现一次,又不行,然后偶尔在decodeByteArray 发现字节数组大小,我突然加大了,居然就可以了,真得是上天给的运气,和自己多动手的糊弄


最后避免加载出现一次,采用decodeByteArray 来加载,但是byte[] bytes  一定要比 图片的字节长 一位 ;
     tempbitmap = BitmapFactory.decodeFile(path, newOpts);
                if (tempbitmap == null) {
                    //如果图片为null, 图片不完整则删除掉图片
                    byte[] bytes = new byte[(int) file.length() + 1];
                    FileInputStream inputStream = new FileInputStream(path);
                    inputStream.read(bytes);
                    tempbitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                    if (tempbitmap == null) {
                        file.delete();
                    }
                }
最后通过查找图片的头部字节发现,这种问题图片是JPG,但是文件结尾字节错误。而且这种图片 用PS 是打不开的。


有惊无险花了2个小时解决了,大部分是运气
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值