BitmapFactory.decodeFile 加载失败 在部分安卓机器的BUG
来源:互联网 发布:农村淘宝开业计划书 编辑:程序博客网 时间:2024/05/29 09:41
通常我们加载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个小时解决了,大部分是运气
但是今天运营部门保障了,说某个广告图不能加载出来,然后我去定位问题,查看本地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个小时解决了,大部分是运气
0 0
- BitmapFactory.decodeFile 加载失败 在部分安卓机器的BUG
- 加载手机磁盘里的图片文件(BitmapFactory.decodeFile()
- BitmapFactory.decodeFile
- BitmapFactory.decodeFile载入的图片和图片在drawable文件夹中的关系
- 加载手机存储卡中的图片BitmapFactory.decodeFile()
- 在使用BitmapFactory.decodeFile时出现java.lang.OutOfMemoryError
- BitmapFactory 方法:decodeFileDescriptor()、decodeFile()
- BitmapFactory.decodeFile返回NULL
- 屏幕密度掺入BitmapFactory里decodeFile与decodeResource的差异
- 屏幕密度掺入BitmapFactory里decodeFile与decodeResource的差异
- 屏幕密度掺入BitmapFactory里decodeFile与decodeResource的差异
- BitMapFactory.decodeFile always returns null.
- Bitmap—— BitmapFactory.decodeFile
- 安卓漫漫路之BitmapFactory高效加载Bitmap.
- BitmapFactory.decodeFile能否对一张来自HTTP的图片进行解码呢
- Android随记------屏幕密度掺入BitmapFactory里decodeFile与decodeResource的差异
- BitmapFactory.decodeFile能否对一张来自HTTP的图片进行解码呢
- android BitmapFactory.decodeFile out of memory 崩溃
- 图片资源
- PHP实现的QQ空间g_tk加密算法
- dubbo学习笔记 十 dubbo-rpc
- swift语言的学习笔记四(类对象,函数)
- LeetCode #173 - Binary Search Tree Iterator - Medium
- BitmapFactory.decodeFile 加载失败 在部分安卓机器的BUG
- Java 的GroupLayout布局
- (4.6.22.5)来吧,是时候撸一份自己的RxJava框架啦:强撸为eventbus
- dubbo学习笔记 十二 dubbo-cluster
- 寻找非共有数字
- 软件项目管理流程总结
- 第四章:shell处理用户输入
- swift语言的学习笔记四-2(对上一节有些遗留进行处理)
- swoole深入学习 3. upd Server和udp Client