微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决尝试为摄像机制作美颜滤镜 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 举报,一经查实,本站将立刻删除。