2014-02-20 3 views
1

Я хочу показать предварительный просмотр камеры SurfaceTexture. Я прочитал этот образец, и он хорошо работает :: Modifying camera output using SurfaceTexture and OpenGLКак показать предварительный просмотр камеры opengl

Теперь я хочу сделать некоторый процесс для кадров предварительного просмотра, как получить данные и нажать на текстуру?

+0

Вы хотите, чтобы вы делали данные текстуры в png или другом формате? – Sung

+0

@SungWoo: Как и пример кода, предварительный просмотр камеры будет отображаться непосредственно на SurfaceTexture. Но теперь я хочу прочитать данные предварительного просмотра с камеры и сделать некоторый процесс для фрейма, а затем показать обработанные данные в SurfaceTexture. Как читать данные предварительного просмотра камеры и как отображать обработанные данные? – user3331791

+0

Я понял! проверьте мое сообщение ниже – Sung

ответ

1

Есть два способа использования OpenGL, чтобы показать эти пиксели данные

  1. Использование OpenGL в JAVA

  2. Использования OpenGL в C или C++ (JNI)

На самом деле, в любом случае, будет легко, если вы знаете, что такое трубопровод opengl

Я всегда с нами е OPENGL с C++ из-за многократного использования в любом случае, только три шага ниже

  1. сделать изображение текстуры с помощью буфера предварительного просмотра с андроида 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. процесс текстуре на frament шейдера (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, потому что это слишком долго, такие как связывание, генерировать видеобуфер, а renderbuffer, настройки шейдеров и скомпилировать его и как сделать двойную буферизацию чтобы избежать щелчка. Если вы не знаете, что это такое, найдите пример и измените три шага.

Смежные вопросы