gpt4 book ai didi

android - 如何通过opengl显示相机预览

转载 作者:行者123 更新时间:2023-11-30 03:05:22 25 4
gpt4 key购买 nike

我想通过 SurfaceTexture 显示相机预览。我已经阅读了这个示例并且它运行良好:: Modifying camera output using SurfaceTexture and OpenGL

现在我想对预览帧做一些处理,如何获取数据并推送到纹理?

最佳答案

有两种方法可以使用opengl来显示这个像素数据

  1. 在 JAVA 中使用 Opengl

  2. 在 C 或 C++ ( JNI ) 中使用 opengl

实际上,无论哪种方式,如果您知道什么是 opengl 管道,都会很容易

由于可重用性,我总是将 opengl 与 c++ 一起使用,只需按照以下三个步骤操作即可

  1. 使用来自 android API 的预览缓冲区制作纹理图像(像素是指向相机帧缓冲区的指针)

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_width, texture_height, 0,GL_RGBA, GL_UNSIGNED_BYTE, pixel); 
  2. 将纹理传递给着色器

        glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, m_TextureMain);
    glUniform1i(textures[0][displayMode], 0);
  3. 在框架着色器中处理纹理(texutre0 是我们刚刚制作的,这段代码将其处理为灰度图像)

          static char grayscale[] = 
    "precision highp float; \n"
    "uniform sampler2D texture0;\n"
    "varying vec2 textureCoordinate;\n"
    "void main()\n"
    "{\n"
    " float grayValue = dot(texture2D(texture0, textureCoordinate), vec4(0.3, 0.59, 0.11, 0.0));\n"
    " gl_FragColor = vec4(grayValue, grayValue, grayValue, 1.0);\n"
    "}\n";

我省略了很多在 opengl 中需要的步骤,因为它太长了,比如绑定(bind)、生成帧缓冲区、渲染缓冲区、着色器设置和编译以及如何进行双缓冲以避免闪烁。如果你不知道这些是什么,找一个例子,改变这三个步骤。

关于android - 如何通过opengl显示相机预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21902490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com