package com.sqisland.android.graphics_demo; import android.annotation.TargetApi; import android.graphics.Bitmap; import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.RenderScript; import android.renderscript.ScriptIntrinsicBlur; import java.util.ArrayList; import java.util.List; @TargetApi(17) public class RenderscriptBlurActivity extends SpinnerImageActivity { @Override protected List<Option> getOptions(Bitmap original) { ArrayList<Option> options = new ArrayList<Option>(); options.add(new Option(getString(R.string.original), original)); for (float radius : new float[]{1, 4, 9, 16, 25}) { options.add(createOption(original, radius)); } return options; } protected int getInitialSelection(int size) { return size - 1; } private Option createOption(Bitmap original, float radius) { String title = getString(R.string.blur_with_radius, radius); Bitmap bitmap = blur(original, radius); return new Option(title, bitmap); } private Bitmap blur(Bitmap original, float radius) { Bitmap bitmap = Bitmap.createBitmap( original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888); RenderScript rs = RenderScript.create(this); Allocation allocIn = Allocation.createFromBitmap(rs, original); Allocation allocOut = Allocation.createFromBitmap(rs, bitmap); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); blur.setInput(allocIn); blur.setRadius(radius); blur.forEach(allocOut); allocOut.copyTo(bitmap); rs.destroy(); return bitmap; } }