比较高效的高斯模糊工具类

注意:需要版本大于19才可以正常使用

public classBlurImageview {

//图片缩放比例

private static final floatBITMAP_SCALE=0.2f;

/**

* 模糊图片的具体方法

*

*@paramcontext上下文对象

*@parambit需要模糊的图片

*@return模糊处理后的图片

*/

public staticBitmapBlurImages(Context context,Bitmap bit, floatblurRadius) {

Bitmap image =ImageCompressL(bit);

// 计算图片缩小后的长宽

intwidth = Math.round(image.getWidth() *BITMAP_SCALE);

intheight = Math.round(image.getHeight() *BITMAP_SCALE);

// 将缩小后的图片做为预渲染的图片

Bitmap inputBitmap = Bitmap.createScaledBitmap(image,width,height, false);

// 创建一张渲染后的输出图片

Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

// 创建RenderScript内核对象

RenderScript rs = RenderScript.create(context);

// 创建一个模糊效果的RenderScript的工具对象

ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs,Element.U8_4(rs));

// 由于RenderScript并没有使用VM来分配内存,所以需要使用Allocation类来创建和分配内存空间

// 创建Allocation对象的时候其实内存是空的,需要使用copyTo()将数据填充进去

Allocation tmpIn = Allocation.createFromBitmap(rs,inputBitmap);

Allocation tmpOut = Allocation.createFromBitmap(rs,outputBitmap);

// 设置渲染的模糊程度, 25f是最大模糊度

blurScript.setRadius(1);

// 设置blurScript对象的输入内存

blurScript.setInput(tmpIn);

// 将输出数据保存到输出内存中

try{

// 实例化Bitmap

blurScript.forEach(tmpOut);

}catch(OutOfMemoryError e) {

//

}

// 将数据填充到Allocation中

tmpOut.copyTo(outputBitmap);

returnoutputBitmap;

}

public staticBitmapImageCompressL(Bitmap bitmap) {

doubletargetwidth = Math.sqrt(10.00*1000);

//        if (bitmap.getWidth() > targetwidth || bitmap.getHeight() > targetwidth) {

// 创建操作图片用的matrix对象

Matrix matrix =newMatrix();

// 计算宽高缩放率

doublex = Math.max(targetwidth / bitmap.getWidth(),targetwidth

/ bitmap.getHeight());

// 缩放图片动作

matrix.postScale((float) x,(float) x);

bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),

bitmap.getHeight(),matrix, true);

//        }

returnbitmap;

}

}

你可能感兴趣的:(比较高效的高斯模糊工具类)