Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将openGL glReadpixels()的输出加载到位图内存中_Android_C++_Opengl Es_Bitmap - Fatal编程技术网

Android 如何将openGL glReadpixels()的输出加载到位图内存中

Android 如何将openGL glReadpixels()的输出加载到位图内存中,android,c++,opengl-es,bitmap,Android,C++,Opengl Es,Bitmap,我已经编写了使用openGL ES 3.0将YUV转换为RGB的代码。我希望将转换后的图像存储在位图内存中,而不是将其显示到视口曲面中。 我使用了openGL帧缓冲区和渲染缓冲区(渲染到纹理),然后尝试使用glReadpixels()函数获取输出。我正在获取输出,但我不知道如何将输出上传到位图内存中。请提供帮助。如果您在客户端(系统)内存中有图像数据,并且希望将其发送到纹理内存,您可以使用(我假设您有一个2D图像) 但是,如果我了解您的用例,那么使用“渲染到渲染缓冲区”,使用glReadPixe

我已经编写了使用openGL ES 3.0将YUV转换为RGB的代码。我希望将转换后的图像存储在位图内存中,而不是将其显示到视口曲面中。
我使用了openGL帧缓冲区和渲染缓冲区(渲染到纹理),然后尝试使用glReadpixels()函数获取输出。我正在获取输出,但我不知道如何将输出上传到位图内存中。请提供帮助。

如果您在客户端(系统)内存中有图像数据,并且希望将其发送到纹理内存,您可以使用(我假设您有一个2D图像)


但是,如果我了解您的用例,那么使用“渲染到渲染缓冲区”,使用glReadPixels将结果读取到系统内存中,然后使用该数据创建新纹理,这有点奇怪。通常,您只需附加一个纹理作为帧缓冲区的颜色输出,然后直接使用它。这将绕过往返到系统内存的过程,因为系统内存非常昂贵。

谢谢,是的,我正在使用2D图像和glTexImage2D(),我将数据从系统内存发送到纹理内存,并完成了一些处理。现在我想在应用着色器和纹理后读取输出,为此我使用了glReadpixels()。现在我想在我的屏幕上使用这个输出图像,我用三种纹理来表示yu和v分量。如果我将这些纹理附加到帧缓冲区,则帧缓冲区状态为“完成”。但是当我从帧缓冲区读取输出时,我无法得到最终的RGB图像。相反,它从帧缓冲区读取任何一个纹理输入。我需要读取YUV到RGB转换的最终输出以存储它以供进一步处理如果要将YUV从着色器中的3个输入纹理转换为RGB帧缓冲区,YUV纹理不应附加到帧缓冲区,它们应该是着色器的统一输入。因此,实际上我不希望在曲面视图中输出。我需要将YUV到RGB的输出存储到缓冲区中。如果不将纹理附加到帧缓冲区,如何访问输出?是否有其他方法可以从缓冲区获取YUV到RGB输出?帧缓冲区是渲染目标。默认帧缓冲区(在Android上下文中)是曲面视图的帧缓冲区,但您可以创建其他帧缓冲区来执行“屏幕外”渲染。查看基本的“渲染到纹理”教程。我为屏幕外渲染创建了帧缓冲区。创建了三个纹理(Y、U和V)组件,并将这些纹理附加到帧缓冲区。当我使用glReadPixels()从帧缓冲区获取最终输出时,我只得到红色图像。但我需要显示RGB图像。怎么做?