讀取網絡圖片和本地sd卡圖片文件 解析爲空 SkImageDecoder::Factory returned null


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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章