package net.robinx.lib.blur;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
/**
* Created by Robin on 2016/7/23 17:13.
*/
public class StackRenderScript {
private static volatile StackRenderScript INSTANCE = null;
public static StackRenderScript getInstance(Context context) {
if (INSTANCE == null) {
synchronized (StackRenderScript.class) {
if (INSTANCE == null) {
INSTANCE = new StackRenderScript(context.getApplicationContext());
}
}
}
return INSTANCE;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private StackRenderScript(Context context){
mRenderScript = RenderScript.create(context);
mBlurScript = ScriptIntrinsicBlur.create(mRenderScript, Element.U8_4(mRenderScript));
}
private RenderScript mRenderScript;
private ScriptIntrinsicBlur mBlurScript;
private Allocation mBlurInput, mBlurOutput;
/**
*
* @param bitmap
* @param radius 0~25
* @return
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public Bitmap blur(Bitmap bitmap, int radius){
if (radius < 1) {
return (null);
}
// Return this none blur
if (radius == 1) {
return bitmap;
}
if (radius > 25) {
radius = 25;
}
mBlurScript.setRadius(radius);
mBlurInput = Allocation.createFromBitmap(mRenderScript, bitmap,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
mBlurOutput = Allocation.createTyped(mRenderScript, mBlurInput.getType());
//mBlurInput.copyFrom(bitmap);
mBlurScript.setInput(mBlurInput);
mBlurScript.forEach(mBlurOutput);
mBlurOutput.copyTo(bitmap);
return (bitmap);
}
}