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 中。



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