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 ...
随机推荐
- Vue2.x整合百度地图JavaScript方案
代码很整合很简单,主要记录操作思路,注意回调百度地图api的回调函数 @/utils/map.js let Map = { BaiDuMap(ak) { return new Promise(func ...
- Python mysql backup
http://www.linuxidc.com/Linux/2015-02/113057.htm ------------- #!/usr/bin/python#################### ...
- canvas基础之变换
2D绘制上下文支持各种基本的绘制变换: rotate(angle):围绕原点旋转图像angle弧度.(举例:如需旋转 5 度,可规定下面的公式:5*Math.PI/180.) scale(scaleX ...
- 查看iPhoneCPU、内存占用
使用Xcode可以查看iPhone cpu 内存 disk 网络占用读取 Xcode-Opem Developer Tool-Instruments, 在打开的窗口里选择Activity Minito ...
- word2vec剖析,资料整理备存
声明:word2vec剖析,资料整理备存,以下资料均为转载,膜拜大神,仅作学术交流之用. word2vec是google最新发布的深度学习工具,它利用神经网络将单词映射到低维连续实数空间,又称为单词嵌 ...
- 将ESXI所有的端口组迁移到分布式交换机的步骤
1.如果是DELL服务器,一般有2-4个网口,那么所有的网口都把网线插到交换机上:2.DELL安装ESXI系统,根据不同的DELL硬件,要安装不同的ESXI版本.原则上越高版本,支持的硬件越多向下兼容 ...
- 针对ROS5版本的配置导出和导入(迁移其他服务器)
1.在老ROS,导出当前系统配置export compact RouterOS 5.12 新增功能 export compact 命令,该命令简化了导出的参数,仅导出修改的配置,系统默 认配置参数将不 ...
- 开发需求:每个表dump出部分数据
mysqldump 每张数据表统一导出的N个记录数 需求: 在开发过程中,需要将生产的数据导出到本地开发环境,希望可以每个表都导出部分数据.由于生产数据表都是上千万或亿级别,直接从服务器导出数据会影响 ...
- c++并发编程实战 笔记
http://blog.csdn.net/u010087886/article/category/5884745
- c++官方文档-指针
#include<stdio.h> #include<iostream> #include<queue> #include<map> #include& ...