一个函数,很好解决图片过大导致内存溢出问题

最近在做个项目,由于用到图片较多,而且图片的像素都很高,所以老是有内存溢出的问题(尤其是在电脑的虚拟机下),然后就用到了一个处理图片的函数,很有用,帮我解决了这个问题,在这里跟大家分享。

public Bitmap getLoacalBitmap(String path) {

		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inJustDecodeBounds = true;
		// path是图片所在位置
		BitmapFactory.decodeFile(path, options); //这里不加载图片,只是取图片大小
		int imageHeight = options.outHeight;
		int imageWidth = options.outWidth;
		
		options.inSampleSize = 1;
		options.inPreferredConfig = Bitmap.Config.RGB_565; //这里用2字节显示图片,一般是4字节(默认
		//判断如果使用内存大于3M,你可以修改这个参数,一般10M应该OK
		int ratio = imageWidth * imageHeight * 2 / 3000000;
		options.inSampleSize = 1; //不缩放,保持原来的大小
		if (ratio >= 1) {
			options.inSampleSize = 2; //宽度和高度将缩小两倍,width/2 and height/2,所以图片会模糊,不过不会消耗很多内存
		}

		if (ratio >= 4) {
			options.inSampleSize = 3;
		}
		// options.inSampleSize = 1;
		options.inJustDecodeBounds = false;
		Bitmap bitmap = BitmapFactory.decodeFile(path, options); //真正的加载图片
		return bitmap;
	}

猜你喜欢

转载自sunsz.iteye.com/blog/1669421