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

在尝试从本地读取并显示图片时,开发者遇到一个问题:无论怎样尝试,应用总是崩溃。即使将图片路径写死,问题依然存在。然而,将图片从其他文件夹复制到目标文件夹后,却能正常读取。经过排查,发现原因是试图使用Bitmap的特定方法来创建适应屏幕的Bitmap,而这种方法不适用于之前通过createBitmap方式保存的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值