大佬教程收集整理的这篇文章主要介绍了android – 如何在没有工件的情况下使用Renderscript模糊效果?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有很多地方(包括here)显示如何使用Renderscript模糊图像,如下所示:
@TargetApi(VERSION_CODEs.jeLLY_BEAN_MR1) public static Bitmap renderScriptBlur(Context context,Bitmap srcBitmap,@FloatRange(from = 0.0f,to = 25.0f) float radius) { if (srcBitmap == null) return null; Bitmap outputBitmap = null; RenderScript rs = null; try { rs = RenderScript.create(context); outputBitmap = Bitmap.createBitmap(srcBitmap.getWidth(),srcBitmap.getHeight(),Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(outputBitmap); canvas.drawBitmap(srcBitmap,@R_262_6633@ AlLOCATIOn overlayAlloc = AlLOCATIOn.createFromBitmap(rs,outputBitmap); ScripTintrinsicBlur blur = ScripTintrinsicBlur.create(rs,Element.U8_4(rs)); blur.seTinput(overlayAlloc); blur.seTradius(radius); blur.forEach(overlayAlloc); overlayAlloc.copyTo(outputBitmap); return outputBitmap; } catch (Exception eX) { if (outputBitmap != null) outputBitmap.recycle(); return srcBitmap; } finally { if (rs != null) rs.destroy(); } }
问题
通常它工作得很好,但是当使用一些图像和/或半径设置时,输出图像具有看起来像扫描线的工件:
我试过的
我发现有一个更好的模糊解决方案(如here),但它们不使用Renderscript,也很慢并且耗费内存.
我也尝试使输入图像更小,但输出仍然有扫描线伪像.
最后,我还报道了这个,here.
这个问题
是否有可能使用Renderscript模糊图像而没有那些Artifcats?我写的是什么问题?
private static final AtomicReference<RenderScript> sRenderscript = new AtomicReference<>(); public static Bitmap blur(Context context,Bitmap bitmap) { return blur(context,bitmap,4,false,falsE); } public static Bitmap blur(Context context,Bitmap bitmap,float radius) { return blur(context,radius,Bitmap bitmapOriginal,to = 25.0f) float radius,Boolean overrideOriginal,Boolean recycLeoriginal) { if (bitmapOriginal == null || bitmapOriginal.isRecycled()) return null; RenderScript rs = sRenderscript.get(); if (rs == null) if (!sRenderscript.compareAndSet(null,rs = RenderScript.create(context)) && rs != null) rs.destroy(); else rs = sRenderscript.get(); final Bitmap inputBitmap = bitmapOriginal.getConfig() == Config.ARGB_8888 ? bitmapOriginal : bitmapOriginal.copy(Config.ARGB_8888,truE); final Bitmap outputBitmap = overrideOriginal ? bitmapOriginal : Bitmap.createBitmap(bitmapOriginal.getWidth(),bitmapOriginal.getHeight(),Config.ARGB_8888); final AlLOCATIOn input = AlLOCATIOn.createFromBitmap(rs,inputBitmap); 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); if (recycLeoriginal && !overrideOriginal) bitmapOriginal.recycle(); output.copyTo(outputBitmap); return outputBitmap; }
现在一切顺利.
以上是大佬教程为你收集整理的android – 如何在没有工件的情况下使用Renderscript模糊效果?全部内容,希望文章能够帮你解决android – 如何在没有工件的情况下使用Renderscript模糊效果?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。