android 实现磨砂效果_Android 5.0 下毛玻璃(磨砂)效果如何实现?

本文介绍了Android下实现磨砂(高斯模糊)效果的三种主流方法:1) 使用RenderScript接口,简单高效但存在模糊半径限制;2) 低版本Android中的Java实现,适用于兼容性方案;3) OpenGL实现,提供最佳效果但可能增加耗电。在实际应用中需权衡性能、效果和耗电等因素。
摘要由CSDN通过智能技术生成

刚刚做技术调研,可以给一些优缺点的对比.

目前主流实现毛玻璃效果(高斯模糊)分大致三种方法:

一 利用RenderScript接口

利用现有Android结构,通过RenderScript调用底层接口实现高斯模糊计算.

// Remix Blurprivate void blur(Bitmap bkg, View view) {

RenderScript rs = RenderScript.create(getActivity());

Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);

ScriptIntrinsicBlur blur =

ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());

blur.setInput(overlayAlloc);

blur.setRadius(radius);

blur.forEach(overlayAlloc);

overlayAlloc.copyTo(overlay);

view.setBackground(new BitmapDrawable(getResources(), overlay));

rs.destroy();

}

说明 :

这种方法直接利用Android系统提供的机制, 从代码实现上是最简单也相对高效的实现. 在此过程中遇到的很现实的问题是: 1. 当模糊半径 (radius)变大后会直接出现计算性能问题. 2. ScriptIntrinsicBlur脚本模糊半径不能大于25. 因此, 直接使用ScriptIntrinsicBlur不能得到模糊程度较高的图片.

考虑到高斯模糊是计算周边像素平均值,在模糊程度很高的情况下,逐点计算平均值从显示效果上优势并不明显.可以通过将图片压缩成小图,计算小图的高斯模糊, 再将小图放大的方法来模拟大半径高斯模糊的效果.

效果如图:模糊前/模糊后

二 在低版本Android中通过Java实现高斯模糊

可以参考如下代码实现

这种方式通过在Java层中直接实现高斯模糊算法.在大模糊半径和大图片情况下,性能会出现问题.基本目前只作为对低版本Android客户端的兼容性方案使用.

三 通过OpenGL直接实现

没有具体实践过, 可以参考muzei壁纸的实现, 无论从效果和实时性来讲都是最好的. 但需要根据需求来看是否真的有这样的实时性要求. 这种方式从显示效果上会优于第一种方法,甚至可以达到渐变的效果.但这些计算都是以耗电作为代价的. 作为Launcher这种系统级别的应用, 在显示效果差异并不明显的情况下, 建议综合考虑耗电量, 以及内存和计算性能的消耗.

如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值