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 ...
随机推荐
- BeanUtils Object 取值赋值
/** * 将结果集导出为Excel * * @param response * @param fsc * @param columns * @param bizType * @throws Exce ...
- RK3399 Android7.1 try 'jack-diagnose' or see Jack server log
CPU:RK3399 系统:Android 7.1 Android 7.1系统使用 jack-server 作为 Java 代码编译器 jack-server 由两个配置文件来决定用户使用的端口 /h ...
- yum下载文件的存放位置
yum下载文件的存放位置 默认是: /var/cache/yum 也可以在 /etc/yum.conf 指定 cachedir=/var/cache/yum #存放目录keepcache=1 # ...
- EF 的一些不常用的功能
1.Add-Migration Initia-IgnoreChanges 生成已有数据库初始化代码 2.update-database -verbose 升级数据库并显示sql语句 3.Update- ...
- 【Hibernate学习笔记-6.1】无连接表的N-1关联(单向)
作者:ssslinppp 1. 摘要 主要讲解N-1关系表的设计,N:从表,1:主表: 从表(N)中使用外键关联到主表(1),单向的: 场景: 许多人(N)可以住在同一个地方(1),知道人 ...
- 1108 Finding Average (20 分)
1108 Finding Average (20 分) The basic task is simple: given N real numbers, you are supposed to calc ...
- 【转载】html中object标签详解
[转载自http://blog.csdn.net/soliy/archive/2010/03/22/5404183.aspx] html标签之Object标签详解 作者:网络 出处:网络 ...
- pip 安装指定版本的python包
pip install -v package_name==2.3
- javascript创建对象之工厂模式(一)
工厂模式在软件工程里面是一种比较常见的设计模式了.这种模式抽象了创建具体对象的过程. 上代码: function createHuman(name,sex) { var obj = new Objec ...
- SQL FORMAT() 函数实例
FORMAT()函数用于对字段的显示进行格式化. SQL FORMAT() 语法 SELECT FORMAT(column_name,format) FROM table_name; 参数 描述 co ...