如此簡單的問題,結果被糾結了一天,無論怎麼搞就是崩潰,將讀取路徑寫死也不可以,但是將其他文件夾的圖片貼到這個文件夾就可以讀取,文件保存明明是沒有問題的,但是就是在用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 中。