是否可以像 Vertex Shader 和 Fragment Shader 一样为 Android Camera Preview 提供效果,并使用 OpenGLES 保存捕获的图像?

Posted

技术标签:

【中文标题】是否可以像 Vertex Shader 和 Fragment Shader 一样为 Android Camera Preview 提供效果,并使用 OpenGLES 保存捕获的图像?【英文标题】:Is it Possible to give effect like Vertex Shader and Fragment Shader to the Android Camera Preview , and Save the Captured image with OpenGLES? 【发布时间】:2011-12-12 11:19:19 【问题描述】:

这两个是My VertexShader和Fragment Shader文件:

顶点着色器文件:

    attribute vec4 position;
attribute vec4 inputTextureCoordinate;

varying vec2 textureCoordinate;
varying vec4 co;

void main()

    gl_Position = position;
    textureCoordinate = inputTextureCoordinate.xy;
    co = inputTextureCoordinate;

片段着色器文件:

    uniform sampler2D videoFrame; // the texture with the scene you want to blur
varying mediump vec2 textureCoordinate;
varying mediump vec4 co;
precision mediump float;

vec4 nightVision()

    float luminanceThreshold = 0.2; // 0.2
    float colorAmplification = 2.0; // 4.0
    float effectCoverage = 1.0; // 1.0
    vec4 finalColor;
    // Set effectCoverage to 1.0 for normal use.
    if (co.x < effectCoverage)
    
        vec3 c = texture2D(videoFrame, co.st).rgb;

        float lum = dot(vec3(0.30, 0.59, 0.11), c);
        if (lum < luminanceThreshold) 
            c *= colorAmplification; 
        
        vec3 visionColor = vec3(0.1, 0.95, 0.2);
        finalColor.rgb = (c) * visionColor;
     else 
        finalColor = texture2D(videoFrame, co.st);
    
    vec4 sum = vec4(0.0, 0.0, 0.0, 1.0);
    sum.rgb = finalColor.rgb;
    return sum;



void main(void)

    gl_FragColor = nightVision();

现在,我想使用此代码在 android 相机预览中提供相机预览效果。并且还想保存该效果捕获的图片。

那么有可能吗??? 如果是,那么请帮助我一些代码,因为我是使用 Android 相机的 OpenGles 的新手。

【问题讨论】:

我们可以通过 onDrawframe() 方法里面的 rendererclass 来保存 GLSurfaceview 绘制的对象。只是更详细地说明您的问题..准确回答您会有所帮助。 ***.com/questions/12519235/… 【参考方案1】:

是的,这绝对是可能的。有很多不同的方法来构建它,一个小的代码示例并没有太大帮助。基本思想是将您从相机获得的帧作为纹理提供给 OpenGL。

查看Camera image as an OpenGL texture on top of the native camera viewfinder。源代码应该让您知道如何继续。

【讨论】:

我已经通过谷歌搜索该项目下载了该项目。但我无法运行该项目。还有其他链接吗?或者这个项目有什么问题? 你还有其他例子吗?我已经尝试过了,但我没有得到任何我想要的正确结果。

以上是关于是否可以像 Vertex Shader 和 Fragment Shader 一样为 Android Camera Preview 提供效果,并使用 OpenGLES 保存捕获的图像?的主要内容,如果未能解决你的问题,请参考以下文章

glCreateShader(GL_VERTEX_SHADER);访问冲突执行位置

Cg入门15:Vertex Shader - 几何变换 —波

Cg入门13: Vertex Shader - 几何变换 —顶点位移

unity shader 学习

Cg入门14:Vertex Shader - 几何变换 —顶点扭曲

Cg入门11:Vertex Shader - 几何变换 —MVP矩阵变换(旋转缩放)