package net.robinx.lib.blur;
import android.content.Context;
import android.graphics.Bitmap;
/**
* This is blur image class
* Use {@link StackNative} fast blur bitmap
* Blur arithmetic is StackBlur
*/
final public class StackBlur extends StackNative {
private static Bitmap buildBitmap(Bitmap bitmap, boolean canReuseInBitmap) {
// If can reuse in bitmap return this or copy
Bitmap rBitmap;
if (canReuseInBitmap) {
rBitmap = bitmap;
} else {
rBitmap = bitmap.copy(bitmap.getConfig(), true);
}
return (rBitmap);
}
/**
* StackBlur By Jni Bitmap
*
* @param original Original Image
* @param radius Blur radius
* @param canReuseInBitmap Can reuse In original Bitmap
* @return Image Bitmap
*/
public static Bitmap blurNatively(Bitmap original, int radius, boolean canReuseInBitmap) {
if (radius < 1) {
return null;
}
Bitmap bitmap = buildBitmap(original, canReuseInBitmap);
// Return this none blur
if (radius == 1) {
return bitmap;
}
//Jni BitMap Blur
blurBitmap(bitmap, radius);
return (bitmap);
}
/**
* StackBlur By Jni Pixels
*
* @param original Original Image
* @param radius Blur radius
* @param canReuseInBitmap Can reuse In original Bitmap
* @return Image Bitmap
*/
public static Bitmap blurNativelyPixels(Bitmap original, int radius, boolean canReuseInBitmap) {
if (radius < 1) {
return null;
}
Bitmap bitmap = buildBitmap(original, canReuseInBitmap);
// Return this none blur
if (radius == 1) {
return bitmap;
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int[] pix = new int[w * h];
bitmap.getPixels(pix, 0, w, 0, 0, w, h);
// Jni Pixels Blur
blurPixels(pix, w, h, radius);
bitmap.setPixels(pix, 0, w, 0, 0, w, h);
return (bitmap);
}
/**
* StackBlur By Java Bitmap
*
* @param original Original Image
* @param radius Blur radius
* @param canReuseInBitmap Can reuse In original Bitmap
* @return Image Bitmap
*/
public static Bitmap blurJava(Bitmap original, int radius, boolean canReuseInBitmap) {
if (radius < 1) {
return (null);
}
Bitmap bitmap = buildBitmap(original, canReuseInBitmap);
if (radius == 1) {
return bitmap;
}
StackJava.blur(bitmap,radius);
return (bitmap);
}
/**
* StackBlur By RenderScript(Just used for API level 17)
*
* @param original Original Image
* @param radius Blur radius 0~25
* @param canReuseInBitmap Can reuse In original Bitmap
* @return Image Bitmap
*/
public static Bitmap blurRenderScript(Context context,Bitmap original, int radius, boolean canReuseInBitmap) {
if (radius < 1) {
return (null);
}
Bitmap bitmap = buildBitmap(original, canReuseInBitmap);
if (radius == 1) {
return bitmap;
}
StackRenderScript.getInstance(context).blur(bitmap,radius);
return (bitmap);
}
}