读取网络图片和本地sd卡图片文件 解析为空 SkImageDecoder::Factory returned null

本文探讨了在Android应用中遇到的图片读取问题,包括从SD卡读取图片时出现null对象的问题及网络读取图片时可能的解析失败情况。提供了解决方案,包括使用BitmapFactory.decodeFile()方法直接读取图片文件路径,以及将网络数据流转换为文件存储后读取。同时,介绍了如何将网络数据流转换为文件的方法,确保图片能够正常解析并显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.sd卡读取图片解析返回null对象(图片实际是存在的sd卡)

最近在使用BitmapFactory.decodeByteArray读取本地图片有时会发生读取的图片是null(联想手机一些横拍照片),保存在本地后,通过字节流读取图片文件再转换为图片,可能会的报SkImageDecoder::Factory returned null的log日志导致解析不成功返回null对象

解决方法:BitmapFactory.decodeFile(picfileString,opts)代替上面方法直接根据地址读取转换为图片不再出现空!

2.网络读取字节流转换图片返回null对象(读取的字节流长度是有的)

  错误方法:

   BitmapFactory.decodeStream(conn.getInputStream());直接把网络数据流转换成图片(图片大小有限制,大图可能出现解析不成功返回为null)

   BitmapFactory.decodeByteArray();把conn.getInputStream()转换成字节流作为参数传入解析成图片也可能会出现空

 解决方法:把网络数据流转换文件,存储在本地再通过BitmapFactory.decodeFile(picfileString,opts)读取!

                       

/ /把图片存到本地                      
               
                            File file=new File(path);
			    InputStream inputStream=conn.getInputStream();
			    FileOutputStream outputSteam=new FileOutputStream(file);
			    byte[] buffer=new byte[2048];
			    int readbyte=0;
			    while((readbyte=inputStream.read(buffer))!=-1)
			    {
			    	outputSteam.write(buffer, 0, readbyte);
			    }
outputSteam.close();
inputStream.close();
                          //读取图片
                          BitmapFactory.Options opts = new BitmapFactory.Options();   
    		int scale=1;//默认缩放比例,1代表不缩放
    		opts.inJustDecodeBounds = true ;//不获取图片,只是拿到图片信息
    		Bitmap bitmap=BitmapFactory.decodeFile(picPath opts);	
    		int w = opts.outWidth;
    		int h = opts.outHeight;
                //计算长宽缩放比例(这里120表示要显示的长宽)
    		double scalew=opts.outWidth/120.0;
    		double scaleh=opts.outHeight/120.0;
    		scale=(int)Math.sqrt(Double.valueOf((scalew*scalew+scaleh*scaleh)));
    		if(scale==0)
			{
				scale=1;
			}
			else
			{
				//取2的倍数缩放
				if(scale%2==0)
				{
					
				}
				else
				{
					scale=scale+1;
				}
			}		
    		opts.inJustDecodeBounds = false ;//确认缩放比例后开始准备加载合适的缩放比图片
    		opts.inSampleSize = scale; 	
    		opts.inPreferredConfig=Config.RGB_565;
    		//bitmap=BitmapFactory.decodeByteArray(b, 0, b.length, opts);	
    		bitmap=BitmapFactory.decodeFile(MyUtils.getTempPic()+clipPicName, opts);


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值