尝试为摄像机制作美颜滤镜 By MasayukiSuda

问题描述

我正在尝试为 MasayukiSuda 制作 this library 的美容过滤器

所以到目前为止,我已经尝试混合 2 个过滤器,它给我带来了某种效果,但这不是我想要实现的。

我想通过扩展 MasayukiSuda 编写的 GlFilter 类来制作一个美容过滤器

所以我喜欢这个

package com.daasuu.camerarecorder.egl.filter;

import static android.opengl.GLES20.gluniform1f;


public class GlBeautyFilter extends GlFilter {

    

    private static final String FRAGMENT_SHADER =
            "precision mediump float;\n" +
                    "\n" +
                    "varying mediump vec2 textureCoordinate;\n" +
                    "\n" +
                    "uniform sampler2D inputimageTexture;\n" +
                    "uniform vec2 singleStepOffset;\n" +
                    "uniform mediump float params;\n" +
                    "\n" +
                    "const highp vec3 W = vec3(0.299,0.587,0.114);\n" +
                    "vec2 blurCoordinates[20];\n" +
                    "\n" +
                    "float hardLight(float color)\n" +
                    "{\n" +
                    "\tif(color <= 0.5)\n" +
                    "\t\tcolor = color * color * 2.0;\n" +
                    "\telse\n" +
                    "\t\tcolor = 1.0 - ((1.0 - color)*(1.0 - color) * 2.0);\n" +
                    "\treturn color;\n" +
                    "}\n" +
                    "\n" +
                    "void main(){\n" +
                    "\n" +
                    "    vec3 centralColor = texture2D(inputimageTexture,textureCoordinate).rgb;\n" +
                    "    blurCoordinates[0] = textureCoordinate.xy + singleStepOffset * vec2(0.0,-10.0);\n" +
                    "    blurCoordinates[1] = textureCoordinate.xy + singleStepOffset * vec2(0.0,10.0);\n" +
                    "    blurCoordinates[2] = textureCoordinate.xy + singleStepOffset * vec2(-10.0,0.0);\n" +
                    "    blurCoordinates[3] = textureCoordinate.xy + singleStepOffset * vec2(10.0,0.0);\n" +
                    "    blurCoordinates[4] = textureCoordinate.xy + singleStepOffset * vec2(5.0,-8.0);\n" +
                    "    blurCoordinates[5] = textureCoordinate.xy + singleStepOffset * vec2(5.0,8.0);\n" +
                    "    blurCoordinates[6] = textureCoordinate.xy + singleStepOffset * vec2(-5.0,8.0);\n" +
                    "    blurCoordinates[7] = textureCoordinate.xy + singleStepOffset * vec2(-5.0,-8.0);\n" +
                    "    blurCoordinates[8] = textureCoordinate.xy + singleStepOffset * vec2(8.0,-5.0);\n" +
                    "    blurCoordinates[9] = textureCoordinate.xy + singleStepOffset * vec2(8.0,5.0);\n" +
                    "    blurCoordinates[10] = textureCoordinate.xy + singleStepOffset * vec2(-8.0,5.0);\n" +
                    "    blurCoordinates[11] = textureCoordinate.xy + singleStepOffset * vec2(-8.0,-5.0);\n" +
                    "    blurCoordinates[12] = textureCoordinate.xy + singleStepOffset * vec2(0.0,-6.0);\n" +
                    "    blurCoordinates[13] = textureCoordinate.xy + singleStepOffset * vec2(0.0,6.0);\n" +
                    "    blurCoordinates[14] = textureCoordinate.xy + singleStepOffset * vec2(6.0,0.0);\n" +
                    "    blurCoordinates[15] = textureCoordinate.xy + singleStepOffset * vec2(-6.0,0.0);\n" +
                    "    blurCoordinates[16] = textureCoordinate.xy + singleStepOffset * vec2(-4.0,-4.0);\n" +
                    "    blurCoordinates[17] = textureCoordinate.xy + singleStepOffset * vec2(-4.0,4.0);\n" +
                    "    blurCoordinates[18] = textureCoordinate.xy + singleStepOffset * vec2(4.0,-4.0);\n" +
                    "    blurCoordinates[19] = textureCoordinate.xy + singleStepOffset * vec2(4.0,4.0);\n" +
                    "\n" +
                    "    float sampleColor = centralColor.g * 20.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[0]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[1]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[2]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[3]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[4]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[5]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[6]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[7]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[8]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[9]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[10]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[11]).g;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[12]).g * 2.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[13]).g * 2.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[14]).g * 2.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[15]).g * 2.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[16]).g * 2.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[17]).g * 2.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[18]).g * 2.0;\n" +
                    "    sampleColor += texture2D(inputimageTexture,blurCoordinates[19]).g * 2.0;\n" +
                    "\n" +
                    "    sampleColor = sampleColor / 48.0;\n" +
                    "\n" +
                    "    float highPass = centralColor.g - sampleColor + 0.5;\n" +
                    "\n" +
                    "    for(int i = 0; i < 5;i++)\n" +
                    "    {\n" +
                    "        highPass = hardLight(highPass);\n" +
                    "    }\n" +
                    "    float luminance = dot(centralColor,W);\n" +
                    "\n" +
                    "    float alpha = pow(luminance,params);\n" +
                    "\n" +
                    "    vec3 smoothColor = centralColor + (centralColor-vec3(highPass))*alpha*0.1;\n" +
                    "\n" +
                    "    gl_FragColor = vec4(mix(smoothColor.rgb,max(smoothColor,centralColor),alpha),1.0);\n" +
                    "}";



    public GlBeautyFilter() {
        super(DEFAULT_VERTEX_SHADER,FRAGMENT_SHADER);
    }





}

所以我制作了片段着色器,并且我使用的是认的顶点着色器,但是每当我应用过滤器应用程序时都会崩溃

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)