package com.zyw.horrarndoo.sdk.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.os.Build; import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.RenderScript; import android.renderscript.ScriptIntrinsicBlur; import android.support.annotation.DrawableRes; import android.view.View; /** * Created by Horrarndoo on 2017/4/5. * Bitmap处理工具类 */ public class BitmapUtils { /** * 将一个view转换成bitmap位图 * @param view 要转换的View * @return view转换的bitmap */ public static Bitmap viewToBitmap(View view) { Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); view.draw(new Canvas(bitmap)); return bitmap; } /** * 获取模糊虚化的bitmap * @param context * @param bitmap 要模糊的图片 * @param radius 模糊等级 >=0 && <=25 * @return */ public static Bitmap getBlurBitmap(Context context, Bitmap bitmap, int radius) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { return blurBitmap(context, bitmap, radius); } return bitmap; } /** * android系统的模糊方法 * * @param bitmap 要模糊的图片 * @param radius 模糊等级 >=0 && <=25 */ private static Bitmap blurBitmap(Context context, Bitmap bitmap, int radius) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { //Let's create an empty bitmap with the same size of the bitmap we want to blur Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap .Config.ARGB_8888); //Instantiate a new Renderscript RenderScript rs = RenderScript.create(context); //Create an Intrinsic Blur Script using the Renderscript ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); //Create the Allocations (in/out) with the Renderscript and the in/out bitmaps Allocation allIn = Allocation.createFromBitmap(rs, bitmap); Allocation allOut = Allocation.createFromBitmap(rs, outBitmap); //Set the radius of the blur blurScript.setRadius(radius); //Perform the Renderscript blurScript.setInput(allIn); blurScript.forEach(allOut); //Copy the final bitmap created by the out Allocation to the outBitmap allOut.copyTo(outBitmap); //recycle the original bitmap bitmap.recycle(); //After finishing everything, we destroy the Renderscript. rs.destroy(); return outBitmap; } else { return bitmap; } } /** * 获取drawable资源文件图片bitmap * * @param context context * @param id 资源文件id * @return 资源文件对应图片bitmap */ public static Bitmap getBitmap(Context context, @DrawableRes int id) { return BitmapFactory.decodeResource(context.getResources(), id); } /** * 转换bitmap宽高 * * @param bitmap bitmap * @param newWidth 新的bitmap宽度 * @param newHeight 新的bitmap高度 * @return 转换宽高后的bitmap */ public static Bitmap conversionBitmap(Bitmap bitmap, int newWidth, int newHeight) { Bitmap b = bitmap; int width = b.getWidth(); int height = b.getHeight(); // 计算缩放比例 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 取得想要缩放的matrix参数 Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // 得到新的图片 return Bitmap.createBitmap(b, 0, 0, width, height, matrix, true); } }