android Bitmap处理以 节省内存的方法

来源:互联网 发布:c语言可视化图形界面 编辑:程序博客网 时间:2024/05/20 13:16
/***获取尺寸为maxWidth*maxHeight大小的图片 maxWidth maxHeight单位为像素px*android布局文件一般都是用与像素无关的dp为单位*可以使用 dip2px 方法转dp为dx*/ public static Bitmap change_image(String ipath, int maxWidth,            int maxHeight) {        BitmapFactory.Options opts1 = new Options();        opts1.inJustDecodeBounds = true;        BitmapFactory.decodeFile(Uri.parse(ipath).toString(), opts1);        int size = computeSampleSize(opts1, -1, maxWidth,                maxHeight);        BitmapFactory.Options opts = new Options();        opts.inSampleSize = size;        System.out.println("ld opts.inSampleSize=" + opts.inSampleSize);        opts.inJustDecodeBounds = false;        Bitmap btm = BitmapFactory                .decodeFile(Uri.parse(ipath).toString(), opts);        return btm;    }/*** 将图片裁剪到合适大小*/ public static int computeSampleSize(BitmapFactory.Options options,            int minSideLength, int maxWidth, int maxHeight) {        int pW = options.outWidth;        int pH = options.outHeight;        if (pW <= maxWidth && pH <= maxHeight)        {            return 1;        }        int roundedSize = pW / maxWidth;        if (pW % maxWidth != 0) {            roundedSize += 1;        }        int r1 = pH / maxHeight;        if (pH % maxHeight != 0) {            r1 += 1;        }        roundedSize = Math.max(r1, roundedSize);        return roundedSize;    }   /**     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)     */    public static int dip2px(Context context, float dpValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (dpValue * scale + 0.5f);    } /**     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp     */    public static int px2dip(Context context, float pxValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (pxValue / scale + 0.5f);    }