Java Code Examples for android.renderscript.ScriptIntrinsicBlur#forEach()
The following examples show how to use
android.renderscript.ScriptIntrinsicBlur#forEach() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SwipeBackHelper.java From Mysplash with GNU Lesser General Public License v3.0 | 6 votes |
private static Bitmap blur(Context context, Bitmap source, float radius){ RenderScript renderScript = RenderScript.create(context); final Allocation input = Allocation.createFromBitmap(renderScript, source); final Allocation output = Allocation.createTyped(renderScript,input.getType()); ScriptIntrinsicBlur scriptIntrinsicBlur = ScriptIntrinsicBlur.create( renderScript, Element.U8_4(renderScript) ); scriptIntrinsicBlur.setInput(input); scriptIntrinsicBlur.setRadius(radius); scriptIntrinsicBlur.forEach(output); output.copyTo(source); renderScript.destroy(); return source; }
Example 2
Source File: UriGlideRenderer.java From deltachat-android with GNU General Public License v3.0 | 6 votes |
@RequiresApi(17) private static @NonNull Bitmap blur(Bitmap bitmap, Context context) { Point previewSize = scaleKeepingAspectRatio(new Point(bitmap.getWidth(), bitmap.getHeight()), PREVIEW_DIMENSION_LIMIT); Point blurSize = scaleKeepingAspectRatio(new Point(previewSize.x / 2, previewSize.y / 2 ), MAX_BLUR_DIMENSION); Bitmap small = BitmapUtil.createScaledBitmap(bitmap, blurSize.x, blurSize.y); Log.d(TAG, "Bitmap: " + bitmap.getWidth() + "x" + bitmap.getHeight() + ", Blur: " + blurSize.x + "x" + blurSize.y); RenderScript rs = RenderScript.create(context); Allocation input = Allocation.createFromBitmap(rs, small); Allocation output = Allocation.createTyped(rs, input.getType()); ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setRadius(25f); script.setInput(input); script.forEach(output); Bitmap blurred = Bitmap.createBitmap(small.getWidth(), small.getHeight(), small.getConfig()); output.copyTo(blurred); return blurred; }
Example 3
Source File: BlurBitmapUtil.java From NewFastFrame with Apache License 2.0 | 6 votes |
public static Drawable createBlurredImageFromBitmap(Bitmap bitmap, Context context, int inSampleSize) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { RenderScript rs = RenderScript.create(context); final BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = inSampleSize; ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] imageInByte = stream.toByteArray(); ByteArrayInputStream bis = new ByteArrayInputStream(imageInByte); Bitmap blurTemplate = BitmapFactory.decodeStream(bis, null, options); final Allocation input = Allocation.createFromBitmap(rs, blurTemplate); final Allocation output = Allocation.createTyped(rs, input.getType()); final ScriptIntrinsicBlur script; script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setRadius(8f); script.setInput(input); script.forEach(output); output.copyTo(blurTemplate); return new BitmapDrawable(context.getResources(), blurTemplate); } return null; }
Example 4
Source File: VMBlur.java From VMLibrary with Apache License 2.0 | 6 votes |
/** * 使用 RenderScript 模糊图片 * PS:此方法只能在 SDK API 17 以上使用 * * @param context 上下文对象 * @param bitmap 需要模糊的bitmap * @param scale 模糊的比例因数 * @param radius 模糊半径 */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public static Bitmap rsBlurBitmp(Context context, Bitmap bitmap, int scale, float radius) { // 创建一个新的压缩过的 Bitmap Bitmap overlay = VMBitmap.compressBitmapByScale(bitmap, scale); RenderScript rs = null; try { rs = RenderScript.create(context); rs.setMessageHandler(new RenderScript.RSMessageHandler()); Allocation input = Allocation.createFromBitmap(rs, overlay, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); Allocation output = Allocation.createTyped(rs, input.getType()); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); blur.setInput(input); blur.setRadius(radius); blur.forEach(output); output.copyTo(overlay); } finally { if (rs != null) { rs.destroy(); } } return overlay; }
Example 5
Source File: BlurTransform.java From android-tv-leanback with Apache License 2.0 | 6 votes |
@Override public Bitmap transform(Bitmap bitmap) { // Create another bitmap that will hold the results of the filter. Bitmap blurredBitmap = Bitmap.createBitmap(bitmap); // Allocate memory for Renderscript to work with Allocation input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED); Allocation output = Allocation.createTyped(rs, input.getType()); // Load up an instance of the specific script that we want to use. ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setInput(input); // Set the blur radius script.setRadius(20); // Start the ScriptIntrinisicBlur script.forEach(output); // Copy the output to the blurred bitmap output.copyTo(blurredBitmap); bitmap.recycle(); return blurredBitmap; }
Example 6
Source File: BitmapUtil.java From MyBookshelf with GNU General Public License v3.0 | 6 votes |
/** * 高斯模糊 */ public static Bitmap stackBlur(Bitmap srcBitmap) { if (srcBitmap == null) return null; RenderScript rs = RenderScript.create(MApplication.getInstance()); Bitmap blurredBitmap = srcBitmap.copy(Bitmap.Config.ARGB_8888, true); //分配用于渲染脚本的内存 Allocation input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED); Allocation output = Allocation.createTyped(rs, input.getType()); //加载我们想要使用的特定脚本的实例。 ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setInput(input); //设置模糊半径 script.setRadius(8); //启动 ScriptIntrinsicBlur script.forEach(output); //将输出复制到模糊的位图 output.copyTo(blurredBitmap); return blurredBitmap; }
Example 7
Source File: Utils.java From Noyze with Apache License 2.0 | 6 votes |
/** * Applies a blur to a {@link Bitmap}. */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public static Bitmap fastBlur(Context mContext, Bitmap sentBitmap, final int radius) { if (null == rs) { rs = RenderScript.create(mContext); } final Allocation in = Allocation.createFromBitmap(rs, sentBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); final Allocation out = Allocation.createTyped(rs, in.getType()); final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setRadius(radius); script.setInput(in); script.forEach(out); out.copyTo(sentBitmap); return (sentBitmap); }
Example 8
Source File: BlurTransform.java From android-tv-leanback with Apache License 2.0 | 6 votes |
@Override public Bitmap transform(Bitmap bitmap) { // Create another bitmap that will hold the results of the filter. Bitmap blurredBitmap = Bitmap.createBitmap(bitmap); // Allocate memory for Renderscript to work with Allocation input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED); Allocation output = Allocation.createTyped(rs, input.getType()); // Load up an instance of the specific script that we want to use. ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setInput(input); // Set the blur radius script.setRadius(20); // Start the ScriptIntrinisicBlur script.forEach(output); // Copy the output to the blurred bitmap output.copyTo(blurredBitmap); bitmap.recycle(); return blurredBitmap; }
Example 9
Source File: Blur.java From UltimateAndroid with Apache License 2.0 | 6 votes |
public static Bitmap apply(Context context, Bitmap sentBitmap, int radius) { final Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); final RenderScript rs = RenderScript.create(context); final Allocation input = Allocation.createFromBitmap(rs, sentBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); final Allocation output = Allocation.createTyped(rs, input.getType()); final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setRadius(radius); script.setInput(input); script.forEach(output); output.copyTo(bitmap); sentBitmap.recycle(); rs.destroy(); input.destroy(); output.destroy(); script.destroy(); return bitmap; }
Example 10
Source File: BitmapUtils.java From YiZhi with Apache License 2.0 | 5 votes |
/** * android系统的模糊方法 * * @param bitmap 要模糊的图片 * @param radius 模糊等级 >=0 && <=25 */ private static Bitmap blurBitmap(Context context, Bitmap bitmap, int radius) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { //Let's create an empty bitmap with the same size of the bitmap we want to blur Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap .Config.ARGB_8888); //Instantiate a new Renderscript RenderScript rs = RenderScript.create(context); //Create an Intrinsic Blur Script using the Renderscript ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); //Create the Allocations (in/out) with the Renderscript and the in/out bitmaps Allocation allIn = Allocation.createFromBitmap(rs, bitmap); Allocation allOut = Allocation.createFromBitmap(rs, outBitmap); //Set the radius of the blur blurScript.setRadius(radius); //Perform the Renderscript blurScript.setInput(allIn); blurScript.forEach(allOut); //Copy the final bitmap created by the out Allocation to the outBitmap allOut.copyTo(outBitmap); //recycle the original bitmap bitmap.recycle(); //After finishing everything, we destroy the Renderscript. rs.destroy(); return outBitmap; } else { return bitmap; } }
Example 11
Source File: ImageUtil.java From timecat with Apache License 2.0 | 5 votes |
/** * 图片高斯模糊具体实现方法 * * @param context * @param image * @param radius * * @return */ public static Bitmap blur(Context context, Bitmap image, float radius) { // 计算图片缩小后的长宽 int width = Math.round(image.getWidth() * BITMAP_SCALE); int height = Math.round(image.getHeight() * BITMAP_SCALE); // 将缩小后的图片做为预渲染的图片。 Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false); // 创建一张渲染后的输出图片。 Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap); // 创建RenderScript内核对象 RenderScript rs = RenderScript.create(context); // 创建一个模糊效果的RenderScript的工具对象 ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); // 由于RenderScript并没有使用VM来分配内存,所以需要使用Allocation类来创建和分配内存空间。 // 创建Allocation对象的时候其实内存是空的,需要使用copyTo()将数据填充进去。 Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap); Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap); // 设置渲染的模糊程度, 25f是最大模糊度 blurScript.setRadius(radius); // 设置blurScript对象的输入内存 blurScript.setInput(tmpIn); // 将输出数据保存到输出内存中 blurScript.forEach(tmpOut); // 将数据填充到Allocation中 tmpOut.copyTo(outputBitmap); return outputBitmap; }
Example 12
Source File: BlurTransformation.java From Android-Tech with Apache License 2.0 | 5 votes |
@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { Bitmap blurredBitmap = toTransform.copy(Bitmap.Config.ARGB_8888, true); // Allocate memory for Renderscript to work with Allocation input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED); Allocation output = Allocation.createTyped(rs, input.getType()); // Load up an instance of the specific script that we want to user. ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setInput(input); // Set the blur radius script.setRadius(10); // start the ScriptInstrinisicBlur script.forEach(output); // Copy the output to the blurred bitmap output.copyTo(blurredBitmap); toTransform.recycle(); return blurredBitmap; }
Example 13
Source File: ImageJpegPlugin.java From image_jpeg with MIT License | 5 votes |
public Bitmap blurImage(Bitmap bm, int blur, int blurZoom) { if (blur > 0 && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { RenderScript rs = RenderScript.create(mRegistrar.activity()); ScriptIntrinsicBlur _blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); int w = bm.getWidth(); int h = bm.getHeight(); Bitmap _temp; if (blurZoom == 0) { _temp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); } else { int tw = w / blurZoom; int th = h / blurZoom; bm = Bitmap.createScaledBitmap(bm, tw, th, false); _temp = Bitmap.createBitmap(tw, th, Bitmap.Config.ARGB_8888); } Allocation _in = Allocation.createFromBitmap(rs, bm); Allocation _out = Allocation.createFromBitmap(rs, _temp); _blur.setRadius(Math.min(25.0f, (((float) blur) / 100.0f) * 25.0f)); // 0 ~ 25 _blur.setInput(_in); _blur.forEach(_out); _out.copyTo(_temp); rs.destroy(); if (blurZoom == 0) return Bitmap.createBitmap(_temp); else return Bitmap.createScaledBitmap(_temp, w, h, true); } else return bm; }
Example 14
Source File: BlurTransformation.java From a with GNU General Public License v3.0 | 5 votes |
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @Override protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) { Bitmap blurredBitmap = toTransform.copy(Bitmap.Config.ARGB_8888, true); // Allocate memory for Renderscript to work with //分配用于渲染脚本的内存 Allocation input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED); Allocation output = Allocation.createTyped(rs, input.getType()); // Load up an instance of the specific script that we want to use. //加载我们想要使用的特定脚本的实例。 ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setInput(input); // Set the blur radius //设置模糊半径 script.setRadius(radius); // Start the ScriptIntrinsicBlur //启动 ScriptIntrinsicBlur, script.forEach(output); // Copy the output to the blurred bitmap //将输出复制到模糊的位图 output.copyTo(blurredBitmap); return blurredBitmap; }
Example 15
Source File: BitmapUtils.java From XKnife-Android with Apache License 2.0 | 5 votes |
/** * Blur bitmap bitmap. * * @param applicationContext the application context * @param bitmap the bitmap * @param radius the radius * @return the bitmap */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) /** * 利用RenderScript进行模糊处理 * 模糊效果的处理是比较耗时的(~250ms),开线程预先处理好*/ public static Bitmap blurBitmap(Context applicationContext, Bitmap bitmap, float radius) { //Let's create an empty bitmap with the same size of the bitmap we want to blur Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); //Instantiate a new Renderscript RenderScript rs = RenderScript.create(applicationContext); //Create an Intrinsic Blur Script using the Renderscript ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); //Create the Allocations (in/out) with the Renderscript and the in/out bitmaps Allocation allIn = Allocation.createFromBitmap(rs, bitmap); Allocation allOut = Allocation.createFromBitmap(rs, outBitmap); //Set the radius of the blur blurScript.setRadius(radius); //Perform the Renderscript blurScript.setInput(allIn); blurScript.forEach(allOut); //Copy the final bitmap created by the out Allocation to the outBitmap allOut.copyTo(outBitmap); //recycle the original bitmap bitmap.recycle(); //After finishing everything, we destroy the Renderscript. rs.destroy(); return outBitmap; }
Example 16
Source File: UIsUtils.java From letv with Apache License 2.0 | 5 votes |
@TargetApi(17) public static Bitmap picBlur(Context context, Bitmap bitmap, Float radius) { Bitmap outPutBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); RenderScript rs = RenderScript.create(context); Allocation allIn = Allocation.createFromBitmap(rs, bitmap); Allocation allOut = Allocation.createFromBitmap(rs, outPutBitmap); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); blur.setInput(allIn); blur.setRadius(TitleBar.SHAREBTN_RIGHT_MARGIN); blur.forEach(allOut); allIn.copyTo(outPutBitmap); rs.destroy(); return outPutBitmap; }
Example 17
Source File: ResizeBitmapHelper.java From Hentoid with Apache License 2.0 | 4 votes |
static Bitmap resizeNice(@NonNull final RenderScript rs, final Bitmap src, float xScale, float yScale) { // Calculate gaussian's radius float sigma = (1 / xScale) / (float) Math.PI; // https://android.googlesource.com/platform/frameworks/rs/+/master/cpu_ref/rsCpuIntrinsicBlur.cpp float radius = 2.5f * sigma/* - 1.5f*/; // Works better that way radius = Math.min(25, Math.max(0.0001f, radius)); Timber.d(">> using sigma=%s for xScale=%s => radius=%s", sigma, xScale, radius); // Defensive programming in case the threading/view recycling recycles a bitmap just before that methods is reached if (null == src || src.isRecycled()) return src; Bitmap.Config bitmapConfig = src.getConfig(); int srcWidth = src.getWidth(); int srcHeight = src.getHeight(); int dstWidth = Math.round(srcWidth * xScale); int dstHeight = Math.round(srcHeight * yScale); src.setHasAlpha(false); // Gaussian filter Allocation tmpIn = Allocation.createFromBitmap(rs, src); Allocation tmpFiltered = Allocation.createTyped(rs, tmpIn.getType()); ScriptIntrinsicBlur blurInstrinsic = ScriptIntrinsicBlur.create(rs, tmpIn.getElement()); blurInstrinsic.setRadius(radius); blurInstrinsic.setInput(tmpIn); blurInstrinsic.forEach(tmpFiltered); src.recycle(); tmpIn.destroy(); blurInstrinsic.destroy(); // Resize Bitmap dst = Bitmap.createBitmap(dstWidth, dstHeight, bitmapConfig); Type t = Type.createXY(rs, tmpFiltered.getElement(), dstWidth, dstHeight); Allocation tmpOut = Allocation.createTyped(rs, t); ScriptIntrinsicResize resizeIntrinsic = ScriptIntrinsicResize.create(rs); resizeIntrinsic.setInput(tmpFiltered); resizeIntrinsic.forEach_bicubic(tmpOut); tmpOut.copyTo(dst); tmpFiltered.destroy(); resizeIntrinsic.destroy(); tmpOut.destroy(); /* // Additional sharpen script just in case (WIP) Allocation tmpSharpOut = Allocation.createTyped(rs, t); //ScriptIntrinsicConvolve3x3 sharpen = ScriptIntrinsicConvolve3x3.create(rs, tmpOut.getElement()); ScriptIntrinsicConvolve3x3 sharpen = ScriptIntrinsicConvolve3x3.create(rs, Element.U8_4(rs)); sharpen.setCoefficients(getSharpenCoefficients()); sharpen.setInput(tmpOut); sharpen.forEach(tmpSharpOut); tmpSharpOut.copyTo(dst); tmpOut.destroy(); tmpSharpOut.destroy(); sharpen.destroy(); */ return dst; }
Example 18
Source File: CaptionedImageView.java From auid2 with Apache License 2.0 | 4 votes |
private void updateBlur() { if (!(mDrawable instanceof BitmapDrawable)) { return; } final int textViewHeight = mTextView.getHeight(); if (textViewHeight == 0) { return; } // Determine the size of the TextView compared to the height of the ImageView final float ratio = (float) textViewHeight / mImageView.getHeight(); // Get the Bitmap final BitmapDrawable bitmapDrawable = (BitmapDrawable) mDrawable; final Bitmap originalBitmap = bitmapDrawable.getBitmap(); // Calculate the height as a ratio of the Bitmap int height = (int) (ratio * originalBitmap.getHeight()); // The y position is the number of pixels height represents from the bottom of the Bitmap final int y = originalBitmap.getHeight() - height; final Bitmap portionToBlur = Bitmap.createBitmap(originalBitmap, 0, y, originalBitmap.getWidth(), height); final Bitmap blurredBitmap = portionToBlur.copy(Bitmap.Config.ARGB_8888, true); // Use RenderScript to blur the pixels RenderScript rs = RenderScript.create(getContext()); ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); Allocation tmpIn = Allocation.createFromBitmap(rs, portionToBlur); Allocation tmpOut = Allocation.createFromBitmap(rs, blurredBitmap); theIntrinsic.setRadius(25f); theIntrinsic.setInput(tmpIn); theIntrinsic.forEach(tmpOut); tmpOut.copyTo(blurredBitmap); new Canvas(blurredBitmap).drawColor(mScrimColor); // Create the new bitmap using the old plus the blurred portion and display it final Bitmap newBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true); final Canvas canvas = new Canvas(newBitmap); canvas.drawBitmap(blurredBitmap, 0, y, new Paint()); mImageView.setImageBitmap(newBitmap); }
Example 19
Source File: BlurTransformation.java From RetroMusicPlayer with GNU General Public License v3.0 | 4 votes |
@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { int sampling; if (this.sampling == 0) { sampling = ImageUtil.calculateInSampleSize(toTransform.getWidth(), toTransform.getHeight(), 100); } else { sampling = this.sampling; } int width = toTransform.getWidth(); int height = toTransform.getHeight(); int scaledWidth = width / sampling; int scaledHeight = height / sampling; Bitmap out = pool.get(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888); if (out == null) { out = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(out); canvas.scale(1 / (float) sampling, 1 / (float) sampling); Paint paint = new Paint(); paint.setFlags(Paint.FILTER_BITMAP_FLAG); canvas.drawBitmap(toTransform, 0, 0, paint); if (Build.VERSION.SDK_INT >= 17) { try { final RenderScript rs = RenderScript.create(context.getApplicationContext()); final Allocation input = Allocation.createFromBitmap(rs, out, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); final Allocation output = Allocation.createTyped(rs, input.getType()); final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setRadius(blurRadius); script.setInput(input); script.forEach(output); output.copyTo(out); rs.destroy(); return out; } catch (RSRuntimeException e) { // on some devices RenderScript.create() throws: android.support.v8.renderscript.RSRuntimeException: Error loading libRSSupport library if (BuildConfig.DEBUG) e.printStackTrace(); } } return StackBlur.blur(out, blurRadius); }
Example 20
Source File: BlurTransformation.java From Social with Apache License 2.0 | 4 votes |
/** * Transforms the given {@link Bitmap} based on the given dimensions and returns the transformed * result. * <p/> * <p> * The provided Bitmap, toTransform, should not be recycled or returned to the pool. Glide will automatically * recycle and/or reuse toTransform if the transformation returns a different Bitmap. Similarly implementations * should never recycle or return Bitmaps that are returned as the result of this method. Recycling or returning * the provided and/or the returned Bitmap to the pool will lead to a variety of runtime exceptions and drawing * errors. See #408 for an example. If the implementation obtains and discards intermediate Bitmaps, they may * safely be returned to the BitmapPool and/or recycled. * </p> * <p/> * <p> * outWidth and outHeight will never be {@link Target#SIZE_ORIGINAL}, this * class converts them to be the size of the Bitmap we're going to transform before calling this method. * </p> * * @param pool A {@link BitmapPool} that can be used to obtain and * return intermediate {@link Bitmap}s used in this transformation. For every * {@link Bitmap} obtained from the pool during this transformation, a * {@link Bitmap} must also be returned. * @param toTransform The {@link Bitmap} to transform. * @param outWidth The ideal width of the transformed bitmap (the transformed width does not need to match exactly). * @param outHeight The ideal height of the transformed bitmap (the transformed heightdoes not need to match */ @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { boolean needScaled = mSampling == DEFAULT_SAMPLING; int originWidth = toTransform.getWidth(); int originHeight = toTransform.getHeight(); int width, height; if (needScaled) { width = originWidth; height = originHeight; } else { width = (int) (originWidth / mSampling); height = (int) (originHeight / mSampling); } //find a re-use bitmap Bitmap bitmap = pool.get(width, height, Bitmap.Config.ARGB_8888); if (bitmap == null) { bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); if (mSampling != DEFAULT_SAMPLING) { canvas.scale(1 / mSampling, 1 / mSampling); } Paint paint = new Paint(); paint.setFlags(Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG); PorterDuffColorFilter filter = new PorterDuffColorFilter(mColor, PorterDuff.Mode.SRC_ATOP); paint.setColorFilter(filter); canvas.drawBitmap(toTransform, 0, 0, paint); // TIPS: Glide will take care of returning our original Bitmap to the BitmapPool for us, // we needn't to recycle it. // toTransform.recycle(); <--- Just for tips. by Ligboy RenderScript rs = RenderScript.create(mContext); Allocation input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); Allocation output = Allocation.createTyped(rs, input.getType()); ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); blur.setInput(input); blur.setRadius(mRadius); blur.forEach(output); output.copyTo(bitmap); rs.destroy(); if (needScaled) { return bitmap; } else { Bitmap scaled = Bitmap.createScaledBitmap(bitmap, originWidth, originHeight, true); bitmap.recycle(); return scaled; } }