Android知识要点整理(9)----Bitmap图片处理和展示

在Android系统中,图片都是以Bitmap的形式呈现在UI界面上的。Bitmap通常是比较消耗内存的,而Anroid APP 都有内存大小限制,所以当我们显示比较大的图片时很容易出现内存溢出的情况。下面就重点讲一讲如何更好地处理Bitmap图片。

1.高效加载大图

在很多情况下,提供的图片尺寸都要比展示在用户界面上的尺寸大。高分辨率的图片展示在低分辨率屏幕的手机上时,即使按照图片的尺寸完全加载,对用户来说也是没什么效果的,看到的仍然是低分辨率的图像。这个时候我们就要考虑有什么办法能够降低内存的使用,而又不影响图片展示的效果。显然,我们可以对图片进行压缩,使之最接近手机屏幕的分辨率。

读取图片的尺寸和类型信息

一种方法就是我们不先全部加载图片到内存,而是预先读取这张图片的尺寸和类型,然后和手机屏幕或者要显示图片的ImageView的尺寸比较,然后决定压缩的比例,这样可以避免内存溢出。代码如下:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;//true 表示仅读取尺寸信息
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
计算压缩比例

我们已经知道了要加载的图片有多大了,同时我们还要知道目标尺寸该是多大。计算目标尺寸的大小不能仅仅考虑ImageView的尺寸,还要从以下几个方面考虑:

  • 整张图片全尺寸加载需要消耗的内存大小
  • 根据应用的内存限制,可以有多少内存用来加载该图片
  • 要显示图片的ImageView或其他UI组件的尺寸
  • 手机设备的屏幕尺寸和像素密度

考虑以上因素,可以得出目标尺寸大小。通常情况下,我们的目标尺寸取得都是ImageView的尺寸。计算压缩比例的代码如下:

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // 图片的原始宽高
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;//压缩比例,默认为不压缩

    if (height > reqHeight || width > reqWidth) { //比较宽高

        final int halfHeight = height / 2;
        final 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值