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); }