OpenGL ES 案例之马赛克滤镜
发布网友
发布时间:2022-11-11 11:20
我来回答
共1个回答
热心网友
时间:2024-10-26 11:28
结合实际案例,我们来实现各种滤镜效果,首先看一下效果:
灰度滤镜的原理算法如下公式,比较常用的是第一种,至于第五种的意思,就是只取绿色,因为人眼对绿色敏感度较高,绿色越少灰度越高。灰度滤镜的实现方法有很多,比如 GPUImage ,或者系统自带的 CoreImage 。
颠倒滤镜比较简单,就是改变纹理的映射关系即可。
马赛克滤镜这里设置三种马赛克图形。
假定我们纹理图片如上图所示,马赛克的作用就是把其他颜色都换成临近的红色,来达到模糊的效果。算法步骤:
那么我们所去的所有像素点都会落在 AB 矩形中,在这里我们用 A 矩形来举例说明。假设我们取了像素点 X ,那么 A 矩形代表六边形的顶点就是顶点1和顶点2,所以像素点 X 的取值必然是在顶点1和顶点2中选择一个。然后我们采用临近原则,由于 d2 小于 d1 ,所以我们这里取得像素中心点的纹理就是顶点2的色值。对应的原理也适用于 B 矩形, B 矩形对应的六边形的顶点就是左下和右上方的顶点。
AB 矩形的宽高比我们知道是3比根号3,如果像素点X的坐标是 (x,y) ,那么对应的像素点 X 在矩阵中的坐标就为 (int(x /( 1.5 * length)),int(y /(TR * length)))
三角形马赛克原理:三角形马赛克是由六边形马赛克演变而来,把六边形六等分,就得到了三角形马赛克。