关于Android 中 Options.inSampleSize怎么用

这个是读取bitmap时用到的属性,是为了对原图降采样.

比如原图是一个 4000 * 4000 点阵的图,占用内存就是  4000 * 4000 * 单个像素占用字节数 
单个像素占用字节数取决于你用的是 RGB565, ARGB8888 等. 4000 * 4000 这个解析度已很接近目前市面主流机器的默认照片解析度.
假设你用的是RGB565解析这张图,那一个点就占用2个字节.如果完整解析这个图片,就需要 大约3.2MB的内存.
如果你用了一个GridView,同时显示了30张这种图,那几乎可以确定你会收到一个OOM异常.

所以需要对这种大图进行降采样,以减小内存占用.毕竟拇指大小的地方根本用不着显示那么高的解析度.
因为直接从点阵中隔行抽取最有效率,所以为了兼顾效率, inSampleSize 这个属性只认2的整数倍为有效.
比如你将 inSampleSize 赋值为2,那就是每隔2行采1行,每隔2列采一列,那你解析出的图片就是原图大小的1/4.
这个值也可以填写非2的倍数,非2的倍数会被四舍五入.

综上,用这个参数解析bitmap就是为了减少内存占用.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android,你可以使用BitmapFactory.Options类的inSampleSize属性来实现同时等比例缩放和压缩Bitmap的功能。具体步骤如下: 1. 通过BitmapFactory.decodeFile或BitmapFactory.decodeStream方法获取原始Bitmap对象。 2. 计算出缩放比例,公式为:inSampleSize = 原始宽度 / 目标宽度(或者原始高度 / 目标高度,取两者比例较小的值)。 3. 设置BitmapFactory.Options对象的inSampleSize属性为计算出的缩放比例。 4. 通过BitmapFactory.decodeFile或BitmapFactory.decodeStream方法,传入设置了inSampleSize属性的BitmapFactory.Options对象,获取压缩后的Bitmap对象。 下面是示例代码: ```java public static Bitmap compressBitmap(String filePath, int targetWidth, int targetHeight) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); int width = options.outWidth; int height = options.outHeight; int inSampleSize = 1; if (width > targetWidth || height > targetHeight) { int widthRatio = Math.round((float) width / (float) targetWidth); int heightRatio = Math.round((float) height / (float) targetHeight); inSampleSize = Math.min(widthRatio, heightRatio); } options.inJustDecodeBounds = false; options.inSampleSize = inSampleSize; Bitmap compressedBitmap = BitmapFactory.decodeFile(filePath, options); return compressedBitmap; } ``` 在上述示例代码,compressBitmap方法接受三个参数:文件路径、目标宽度和目标高度。方法内部首先通过设置options.inJustDecodeBounds为true来获取原始Bitmap对象的宽度和高度,然后根据目标宽度和高度计算出缩放比例inSampleSize,最后再通过设置options.inSampleSize属性来获取压缩后的Bitmap对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值