android基础学习001_android 加载大图片内存不足系统崩溃问题

本文介绍了在Android中如何处理加载大图片导致的内存不足问题,通过使用BitmapFactory的Options设置缩放比例,避免系统崩溃。核心代码是先获取图片原始尺寸,然后计算与屏幕的比例,设置缩放因子,最后按比例加载图片到ImageView。

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

由于机器内存的限制,加载大图片时有时候系统会崩溃

必须根据屏幕的宽高进行比例缩放的显示,核心代码如下所示

public void onClickLoadBigPic(View v){

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
/*Bitmap bm = BitmapFactory.decodeFile("sdcard/bigpicture.jpg");//这样直接加载大图片系统会崩溃
if(bm != null)
{
System.out.println("onClickLoadBigPic  BitmapFactory.decodeFile success -------------");

ImageView imageView = (ImageView) findViewById(R.id.ivImageView);
imageView.setImageBitmap(bm);
}
else {
System.out.println("onClickLoadBigPic  BitmapFactory.decodeFile failed -------------");
}*/
/**
* 上述直接加载大图片系统会崩溃,下面的方法是按照屏幕和图片宽高的比例进行缩放来加载图片
*/
Options options = new Options();
//不为像素申请内存,只获取图片宽高
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile("sdcard/bigpicture.jpg", options);
int imageWidth = options.outWidth;
int imageHeight = options.outHeight;

System.out.println("picture " + imageWidth + " " + imageHeight);

//计算屏幕宽高
Display dpDisplay = getWindowManager().getDefaultDisplay();
int screenWidth = dpDisplay.getWidth();
int screenHeight = dpDisplay.getHeight();

System.out.println("screen " + screenWidth + " " + screenHeight);

//计算缩放比例
int scale = 1;
int scaleWidth = imageWidth / screenWidth;
int scaleHeight = imageHeight / screenHeight;
if(scaleWidth >= scaleHeight && scaleWidth >= 1){

scale = scaleWidth;
}
else if(scaleWidth < scaleHeight && scaleHeight >= 1){

scale = scaleHeight;
}

System.out.println("scale " + scale);

//设置缩放比例
options.inSampleSize = scale;
options.inJustDecodeBounds = false;
Bitmap bmBitmap = BitmapFactory.decodeFile("sdcard/bigpicture.jpg", options);
ImageView ivImageView = (ImageView) findViewById(R.id.ivImageView);
ivImageView.setImageBitmap(bmBitmap);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值