MIUI 6的毛玻璃效果的技术实现(实时模糊)
- 需要背景模糊的Window给自己添加一个标记:FLAG_BLUR_BEHIND,这个标记是Android SDK提供的,因为Android的早期版本是有支持背景模糊的,不过由于他们不是用的OpenGL ES实时绘制,性能比较差,于是后来把这个功能给废弃了。我们便顺理成章的又把这个标记给用起来。第三方应用也完全可以使用这个标记在MIUI 6用上这个特性。
- 在WindowManagerService这边检测到Window有这个标记后,将标记传给SurfaceFlinger中Window对应的Layer。
- Layer收到背景模糊标记后,分配一个Texture。
- 在SurfaceFlinger合成层的方法doComposeSurfaces中,把背景模糊的层后面的内容用OpenGL ES以模糊的方式绘制到之前分配的Texture中,于是构建好了模糊的内容。在接下来绘制这个层的时候先绘制含有模糊内容的Texture。
- 将图片先缩小,再模糊,绘制的时候再放大。由于先缩小再放大也是一种模糊方法,因此控制得好的话并没有什么问题。但防止缩小太厉害会导致背景移动的时候画面闪烁,我们会逐级缩小。(GL_TEXTURE_EXTERNAL_OES不支持mipmap)
- 模糊的主要实现过程使用OpenGL ES Fragment Shader来实现,先横向计算一遍,再纵向计算一遍,这样处理则每个像素的采样次数从n*n变成了n*2(n是模糊直径)。事实上我们在背景模糊的Layer里分配了两个Texture,循环使用。
- 采样取像素值的时候并不需要每个像素取一次,而是利用OpenGL ES中纹理采样的线性过滤特性,在两个像素中间取值,返回的是两个像素的平均值,这样可以让采样次数减半,效果不变。(真实代码中并不是完全中间,而是根据权重计算位置)
- 如果上一帧已经产生了模糊的Texture,而这一帧背景又没有变化,则直接使用上一帧的就行了,不需要再做模糊处理。
MIUI 6的毛玻璃效果的技术实现(实时模糊)的更多相关文章
- CSS技巧收集——毛玻璃效果
先上 demo和 源码 其实毛玻璃的模糊效果技术上比较简单,只是用到了 css 滤镜(filter)中的 blur 属性.但是要做一个好的毛玻璃效果,需要注意很多细节. 比如我们需要将上图中页面中间的 ...
- 一次H5毛玻璃效果有感
印象中H5实现毛玻璃效果是挺好实现的,主要的代码就是css的filter:blur. 之前也用过几次,给背景图加高斯模糊啊,给一个div加高斯模糊啊.只要给需要添加高斯模糊的元素直接添加filter属 ...
- CSS 奇思妙想 | 全兼容的毛玻璃效果
通过本文,你能了解到 最基本的使用 CSS backdrop-filter 实现磨砂玻璃(毛玻璃)的效果 在至今不兼容 backdrop-filter 的 firefox 浏览器,如何利用一些技巧性的 ...
- 使用CSS3制作导航条和毛玻璃效果
导航条对于每一个Web前端攻城狮来说并不陌生,但是毛玻璃可能会相对陌生一些.简单的说,毛玻璃其实就是让图片或者背景使用相应的方法进行模糊处理.这种效果对用户来说是十分具有视觉冲击力的. 本次分享的主题 ...
- 解决css3毛玻璃效果(blur)有白边问题
做一个登录页,全屏背景图毛玻璃效果,实现方法如下: HTML: <body> <div class="login-wrap"> <div class= ...
- Swift 之模糊效果(毛玻璃效果,虚化效果)的实现
前言: 之前项目中有用到过Objective-C的的模糊效果,感觉很是不错,而且iOS8之后官方SDK也直接提供了可以实现毛玻璃效果的三个类:UIBlurEffect.UIVibrancyEffect ...
- css毛玻璃效果
毛玻璃其实就是磨砂玻璃,能够模糊的看清背后的风景,让人感觉有种朦胧美,让界面看上去有些层次感. 比如: 高大上啊,接下来肯定是眼馋手痒的过程... 当然,用ps搞一个全景毛玻璃背景毫无疑问是最省事的, ...
- iOS模糊效果(毛玻璃效果)的实现
前一段时间项目中用到毛玻璃效果,那时对UIBlurEffect类和 UIVisualEffectView这两个类做了一部分了解.但当时并没有去特别的深入研究,直到项目做完后,才静下心来好好研究了一番. ...
- qt qml fuzzyPanel 毛玻璃效果
毛玻璃效果,用qml来写代码真是简短,大爱qml:) [下载地址]http://download.csdn.net/detail/surfsky/8426641 [核心代码] Rectangle{ c ...
随机推荐
- linux 标准I/O (一)
在前面<UNIX环境高级编程----文件描述符浅析>一文中所讲的I/O函数都是针对文件描述符.而对于标准I/O库,它们的操作都是围绕流来进行的.当用标准I/O库打开或创建一个文件时,我们已 ...
- git: fatal: Could not read from remote repository
This is probably an Intellij problem. Your key are managed natively by ssh, and Intellij has it's ow ...
- DevExpress 组件
最近看到 伍华聪 的博客里, DevExpress 组件那个效果很好看,特别是 LookUpEdit GridLookUpEdit 这两个控件,完美改善了 WinForm 里的 ComboBox 今天 ...
- wordpress模板里加keywords和description
刚才我说了,wp会弄的话,功能是很强大的,插件很多,基本上你能想到的功能,插件都开发好了的.现在就来说说这个keywords和description的问题.我在网上找了些资料,总结一下,如果有引用到的 ...
- 模拟估算器:scikit-learn Estimator
转载:https://www.toutiao.com/i6606193174010397187/ 当一个数据科学项目刚刚开始时,关键是要尽可能快地走向一个最小可行的产品(MVP).这个MVP将包含最终 ...
- Hibernate hibernate.cfg.xml配置
数据库连接<required>: <property name="hibernate.connection.driver_class"> com.mysql ...
- 线程池,queue模块增加用法
1 同一个进程内的队列(多线程) import queue queue.Queue() 先进先出 queue.LifoQueue() 后进先出 queue.PriorityQueue() 优先级队列 ...
- springboot的一些配置
spring-boot 1.推荐使用yaml,因为默认的properties需要写更多的前缀 2.使用java -jar 的方式启动jar包的情况下,通过-spring.profiles.actiiv ...
- 数据库之SQL笛卡尔积
1.笛卡尔积定义 笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join).所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表 ...
- C基本语句和运算符
1,逗号运算符