Skip to content

Commit

Permalink
Use no-op BlurAlgorithm impl by default, get rid of Support RenderScr…
Browse files Browse the repository at this point in the history
…ipt dependency
  • Loading branch information
Dimezis committed Apr 3, 2017
1 parent 0228a33 commit ff98500
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 24 deletions.
6 changes: 2 additions & 4 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ android {
buildToolsVersion "25.0.2"

defaultConfig {
renderscriptTargetApi 25
renderscriptSupportModeEnabled true
minSdkVersion 14
targetSdkVersion 25
versionCode 15
Expand All @@ -32,8 +30,8 @@ configurations {

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-annotations:25.1.0'
javadocDeps 'com.android.support:support-annotations:25.1.0'
compile 'com.android.support:support-annotations:25.2.0'
javadocDeps 'com.android.support:support-annotations:25.2.0'
}

apply plugin: 'maven'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void run() {
BlockingBlurController(@NonNull View blurView, @NonNull ViewGroup rootView) {
this.rootView = rootView;
this.blurView = blurView;
this.blurAlgorithm = new RenderScriptBlur(blurView.getContext(), true);
this.blurAlgorithm = new NoOpBlurAlgorithm();

int measuredWidth = blurView.getMeasuredWidth();
int measuredHeight = blurView.getMeasuredHeight();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package eightbitlab.com.blurview;

import android.graphics.Bitmap;
import android.support.annotation.NonNull;

class NoOpBlurAlgorithm implements BlurAlgorithm {
@Override
public Bitmap blur(Bitmap bitmap, float blurRadius) {
return bitmap;
}

@Override
public void destroy() {
}

@Override
public boolean canModifyBitmap() {
return true;
}

@NonNull
@Override
public Bitmap.Config getSupportedBitmapConfig() {
return Bitmap.Config.ARGB_8888;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,31 @@

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;
import android.support.annotation.NonNull;
import android.support.v8.renderscript.Allocation;
import android.support.v8.renderscript.Element;
import android.support.v8.renderscript.RenderScript;
import android.support.v8.renderscript.ScriptIntrinsicBlur;
import android.support.annotation.RequiresApi;

/**
* Blur using RenderScript, processed on GPU. Currently the fastest blur algorithm.
* Blur using RenderScript, processed on GPU.
* Requires API 17+
*/
public final class RenderScriptBlur implements BlurAlgorithm {
private final RenderScript renderScript;
private final ScriptIntrinsicBlur blurScript;
private Allocation outAllocation;

private final boolean canModifyBitmap;

private int lastBitmapWidth = -1;
private int lastBitmapHeight = -1;

public RenderScriptBlur(Context context, boolean canModifyBitmap) {
this.canModifyBitmap = canModifyBitmap;
/**
* @param context Context to create the {@link RenderScript}
*/
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public RenderScriptBlur(Context context) {
renderScript = RenderScript.create(context);
blurScript = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
}
Expand All @@ -36,17 +40,11 @@ private boolean canReuseAllocation(Bitmap bitmap) {
* @param blurRadius blur radius (1..25)
* @return blurred bitmap
*/
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public final Bitmap blur(Bitmap bitmap, float blurRadius) {
//Allocation will use the same backing array of pixels as bitmap if created with USAGE_SHARED flag
Allocation inAllocation = Allocation.createFromBitmap(renderScript, bitmap);
Bitmap outputBitmap;

if (canModifyBitmap) {
outputBitmap = bitmap;
} else {
outputBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
}

if (!canReuseAllocation(bitmap)) {
if (outAllocation != null) {
Expand All @@ -61,10 +59,10 @@ public final Bitmap blur(Bitmap bitmap, float blurRadius) {
blurScript.setInput(inAllocation);
//do not use inAllocation in forEach. it will cause visual artifacts on blurred Bitmap
blurScript.forEach(outAllocation);
outAllocation.copyTo(outputBitmap);
outAllocation.copyTo(bitmap);

inAllocation.destroy();
return outputBitmap;
return bitmap;
}

@Override
Expand All @@ -78,7 +76,7 @@ public final void destroy() {

@Override
public boolean canModifyBitmap() {
return canModifyBitmap;
return true;
}

@NonNull
Expand Down

0 comments on commit ff98500

Please sign in to comment.