Android 读取保存在本地的图片 (读取中的一个大坑)

来源:互联网 发布:板绘软件sai 编辑:程序博客网 时间:2024/04/28 21:44

如此简单的问题,结果被纠结了一天,无论怎么搞就是崩溃,将读取路径写死也不可以,但是将其他文件夹的图片贴到这个文件夹就可以读取,文件保存明明是没有问题的,但是就是在用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 blocke.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 中。



0 0