package at.favre.lib.dali.blur.algorithms;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v8.renderscript.Allocation;
import android.support.v8.renderscript.Element;
import android.support.v8.renderscript.RenderScript;
import at.favre.lib.dali.ScriptC_stackblur;
import at.favre.lib.dali.blur.IBlur;
/**
* by kikoso
* from https://github.com/kikoso/android-stackblur/blob/master/StackBlur/src/blur.rs
*/
public class RenderScriptStackBlur implements IBlur {
private RenderScript _rs;
private Context ctx;
public RenderScriptStackBlur(RenderScript rs, Context ctx) {
this.ctx = ctx;
this._rs = rs;
}
@Override
public Bitmap blur(int radius, Bitmap blurred) {
int width = blurred.getWidth();
int height = blurred.getHeight();
ScriptC_stackblur blurScript = new ScriptC_stackblur(_rs);
Allocation inAllocation = Allocation.createFromBitmap(_rs, blurred);
blurScript.set_gIn(inAllocation);
blurScript.set_width(width);
blurScript.set_height(height);
blurScript.set_radius(radius);
int[] row_indices = new int[height];
for (int i = 0; i < height; i++) {
row_indices[i] = i;
}
Allocation rows = Allocation.createSized(_rs, Element.U32(_rs), height, Allocation.USAGE_SCRIPT);
rows.copyFrom(row_indices);
row_indices = new int[width];
for (int i = 0; i < width; i++) {
row_indices[i] = i;
}
Allocation columns = Allocation.createSized(_rs, Element.U32(_rs), width, Allocation.USAGE_SCRIPT);
columns.copyFrom(row_indices);
blurScript.forEach_blur_h(rows);
blurScript.forEach_blur_v(columns);
inAllocation.copyTo(blurred);
return blurred;
}
}