Android 讀取保存在本地的圖片 (讀取中的一個大坑)

如此簡單的問題,結果被糾結了一天,無論怎麼搞就是崩潰,將讀取路徑寫死也不可以,但是將其他文件夾的圖片貼到這個文件夾就可以讀取,文件保存明明是沒有問題的,但是就是在用imageview來顯示的時候就是會崩潰。最後發現問題所在了,就是在顯示的圖片的時候用到了Bitmap的一個方法,

createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
Returns an immutable bitmap from subset of the source bitmap, transformed by the optional matrix.
調用這個方法時,並沒有對其返回的類型細緻的去看,結果出現了這個問題,調用該方法後,返回的是一個不可修改的Bitmap,將其保存在本地後,然後將其讀取出來,然後爲了防止出現圖片過得問題要對其進行修改,所以用到了一個方法就是將該圖片作爲資源圖片,然後創建一個Bitmap圖片對其進行顯示,根據資源文件創建出一個新的圖片出來其實就對原圖片的修改,所以說當我們處理到着的時候就會出現錯誤。

首先是對於圖片的獲取保存在之前的博客中有寫,今天寫一下如何將圖片讀出來,然後將圖片的做修改後,貼出來,之前對圖片的保存如果保存的是createBitmap獲得圖片的話將不能夠在使用 creatBitmap來創建一個適應屏幕的Bitmap的來進行顯示了。

 try {
//一個文件輸入流,根據指定路徑將所需要的圖片讀取進來。
			FileInputStream in = new FileInputStream(cursor.getString(2));
			 bitmap = BitmapFactory.decodeStream(in);
			 Log.i("測試", bitmap+"");
			 try {
			    in.close();
			} catch (IOException e) {
			    // TODO Auto-generated catch block
			    e.printStackTrace();
			}
		    } catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		    }
		    	
//將所獲得圖片進行處理,然後將圖片
			float scaleWidth = (width - 15)/ ((float) bitmap.getWidth());
			float scaleHeight = scaleWidth;
			Matrix matrix = new Matrix();
			matrix.postScale(scaleWidth, scaleHeight);
		        Bitmap newbm = Bitmap.createBitmap(bitmap, 0,0, bitmap.getWidth(),bitmap.getHeight(),matrix,true);
		        bitmap.recycle();
		    ImageView image = new ImageView(this);
		    image.setImageBitmap(newbm);
		    LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
		     lp1.leftMargin=5;  
		     editContent.addView(image,lp1);
通過上述方法,我們就可以將我們從本地獲取的圖片添加到我們在佈局中寫的ImageView 中。



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