图片压缩问题

在做项目的时候,遇到了一个oom问题,这不是从网络加载图片的,大家都知道,网络加载图片,可以用工具类进行加载,他们里面封装过线程池,并封装过三级焕春和图片的比例压缩,所以一般不会出现oom问题,这是我加载本地图片的时候,出现的oom问题,就找了一下代码,觉得还算可以,反正我的问题是解决了,分享出来给大家看看!
	/**
	 * 压缩图片
	 * @param bitmap 源图片
	 * @param width 想要的宽度
	 * @param height 想要的高度
	 * @param isAdjust 是否自动调整尺寸, true图片就不会拉伸,false严格按照你的尺寸压缩
	 * @return Bitmap
	 * @author wangyongzheng
	 */
	public Bitmap reduce(Bitmap bitmap, int width, int height, boolean isAdjust) {
		// 如果想要的宽度和高度都比源图片小,就不压缩了,直接返回原图
		if (bitmap.getWidth() < width && bitmap.getHeight() < height) {return bitmap;}
		// 根据想要的尺寸精确计算压缩比例, 方法详解:public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode);
		// scale表示要保留的小数位, roundingMode表示如何处理多余的小数位,BigDecimal.ROUND_DOWN表示自动舍弃
		float sx = new BigDecimal(width).divide(new BigDecimal(bitmap.getWidth()), 4, BigDecimal.ROUND_DOWN).floatValue();
		float sy = new BigDecimal(height).divide(new BigDecimal(bitmap.getHeight()), 4, BigDecimal.ROUND_DOWN).floatValue();
		if (isAdjust) {// 如果想自动调整比例,不至于图片会拉伸
			sx = (sx < sy ? sx : sy);sy = sx;// 哪个比例小一点,就用哪个比例
		}
		Matrix matrix = new Matrix();
		matrix.postScale(sx, sy);// 调用api中的方法进行压缩,就大功告成了
		return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值