android在开发时常用到的图片的压缩后在操作,实现类BitmapUtils.java

import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.widget.ImageView;/** * @author Administrator * @content * @date 2018/1/26 */public class BitmapUtils {    /**     * @description 计算图片的压缩比率     *     * @param options 参数     * @param reqWidth 目标的宽度     * @param reqHeight 目标的高度     * @return     */    private 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 int halfWidth = width / 2;            // Calculate the largest inSampleSize value that is a power of 2 and keeps both            // height and width larger than the requested height and width.            while (halfHeight / inSampleSize > reqHeight && halfWidth / inSampleSize > reqWidth) {                inSampleSize *= 2;            }        }        return inSampleSize;    }    /**     * @description 通过传入的bitmap,进行压缩,得到符合标准的bitmap     *     * @param src     * @param dstWidth     * @param dstHeight     * @return     */    private static Bitmap createScaleBitmap(Bitmap src, int dstWidth, int dstHeight, int inSampleSize) {        Bitmap dst = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, false);        if (src != dst) { // 如果没有缩放,那么不回收            src.recycle(); // 释放Bitmap的native像素数组        }        return dst;    }    /**     * @description 从Resources中加载图片     *     * @param res     * @param resId     * @param reqWidth     * @param reqHeight     * @return     */    public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) {        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true; // 设置成了true,不占用内存,只获取bitmap宽高        BitmapFactory.decodeResource(res, resId, options); // 读取图片长宽,目的是得到图片的宽高        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // 调用上面定义的方法计算inSampleSize值        // 使用获取到的inSampleSize值再次解析图片        options.inJustDecodeBounds = false;        Bitmap src = BitmapFactory.decodeResource(res, resId, options); // 载入一个稍大的缩略图        return createScaleBitmap(src, reqWidth, reqHeight, options.inSampleSize); // 通过得到的bitmap,进一步得到目标大小的缩略图    }    /**     * @description 从SD卡上加载图片     *     * @param pathName     * @param reqWidth     * @param reqHeight     * @return     */    public static Bitmap decodeSampledBitmapFromFile(String pathName, int reqWidth, int reqHeight) {        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(pathName, options);        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);        options.inJustDecodeBounds = false;        Bitmap src = BitmapFactory.decodeFile(pathName, options);        return createScaleBitmap(src, reqWidth, reqHeight, options.inSampleSize);    }    /**     * 大图压缩     * @param context     * @param resourcesId     * @param imageView     */    public static void loadBitmap(Activity context, int resourcesId, ImageView imageView) {        int bmSize = 0;        Bitmap bm = null;        if (true) {            // 通过工具类来产生一个符合ImageView的缩略图,因为ImageView的大小是50x50,所以这里得到的缩略图也应该是一样大小的            bm = BitmapUtils.decodeSampledBitmapFromResource(context.getResources(), resourcesId, imageView.getWidth(), imageView.getHeight());        } else {            // 直接加载原图            bm = BitmapFactory.decodeResource(context.getResources(), resourcesId);        }        imageView.setImageBitmap(bm);        bmSize += bm.getByteCount(); // 得到bitmap的大小        int kb = bmSize / 1024;        int mb = kb / 1024;    }}

更多相关文章

  1. Android(安卓)图片旋转(使用Matrix.setRotate方法)
  2. Android根据电量变化为不同图片的方法【电池电量提示】
  3. Android日常应用记录
  4. 实现调用Android手机的拍照功能
  5. android JNI处理图片的例子
  6. Android分享图片
  7. Android腾讯微薄客户端开发十四:首页menu菜单
  8. Android之关于手势操作图片的缩放与移动
  9. 自己写的Android(安卓)Contacts操作类,以后还会补充

随机推荐

  1. Android学习笔记在互联网上火了,讲的明明
  2. Android布局优化
  3. 那些大厂的Android高级工程师岗位都需要
  4. Android(安卓)Design版微信首度亮相:微信
  5. android Menu菜单操作(偏门--监听 more 操
  6. Android(安卓)开发的前景如何?
  7. opencv for android:如何在Android(安卓)
  8. 现阶段 Android(安卓)行业真的凉了吗?到底
  9. 最近,又有人在谈论Android的前景了...
  10. Android(安卓)客户端性能优化(魅族资深工