我想在原始图像上进行图像处理而不在屏幕上显示(我想根据图像数据进行一些计算,并根据这些计算在屏幕上显示一些结果。)我找到了一个有趣的答案{{ 3}},如下所示:
在GPU上进行实际处理:设置OpenGL上下文(OpenGL ES 2教程),并在该上下文中创建一个SurfaceTexture对象。 然后将该对象传递给setPreviewTexture,并开始预览。然后, 在您的OpenGL代码中,您可以调用SurfaceTexture.updateTexImage,和 与SurfaceTexture关联的纹理ID将更新为 来自相机的最新预览帧。你也可以回读一下 RGB纹理数据到CPU,以便使用glReadPixels进行进一步处理, 如果需要的话。
我有一个关于如何实施它的问题。
我是否需要创建GLSurfaceView
和Renderer
,我实际上并不想使用OpenGL在屏幕上绘制任何内容,因此我不确定是否需要它们?从我在网上看到的内容虽然为了设置OpenGL上下文而拥有这些内容似乎非常必要?任何人都可以给我这个指针吗?
答案 0 :(得分:2)
您不得使用GLSurfaceView
。 GLSurfaceView
是一个纯粹用Java编写的便利类。它简化了想要在Android中使用OpenGL渲染的应用程序的设置部分,但其所有功能也可通过Android框架中的低级接口获得。
对于纯粹的屏幕外渲染,您可以使用EGL界面来创建上下文,曲面等。有些令人困惑的是,Android框架的完全不同的部分有两个版本:
EGL10
包中的EGL11
和javax.microedition.khronos.egl
。EGL14
位于android.opengl
包中,自API级别17开始提供。
它们非常相似,但较新的EGL14
显然有更多功能。如果您的目标是至少API级别17,我会选择较新的版本。
使用EGL14
类中的方法,您可以创建上下文,曲面等。对于屏幕外渲染,一个选项是创建用于渲染的Pbuffer曲面。要完成设置,您通常会使用以下功能:
eglInitialize
eglChooseConfig
eglCreatePbufferSurface
eglCreateContext
eglMakeCurrent
Android文档并未真正描述这些功能,但您可以在Khronos网站上找到实际文档:https://www.khronos.org/registry/egl/sdk/docs/man/。