Если вы хотите прочитать пиксели из изображения текстуры в OpenGL ES, то вам необходимо прикрепить текстуру к буферу кадров и прочитать цветовую плоскость из буфера кадров с помощью glReadPixels
GLuint textureObj = ...; // the texture object - glGenTextures
GLuint fbo;
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureObj, 0);
int data_size = mWidth * mHeight * 4;
GLubyte* pixels = new GLubyte[mWidth * mHeight * 4];
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &fbo);
Все используемые в этом фрагменте кода функции поддерживаются OpenGL ES 2.0.
Обратите внимание, что в настольном OpenGL есть glGetTexImage
, который можно использовать для чтения данных пикселейиз текстуры.Эта функция не существует в OpenGL ES.
Для записи изображения в файл (на языке c ++) я рекомендую использовать библиотеку, подобную STB library , которую можно найти по адресу GitHub - nothings / stb ,
Для использования библиотеки STB достаточно включить заголовочные файлы (связывать ничего не нужно):
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include <stb_image_write.h>
Использовать stbi_write_bmp
длязапись BMP-файла :
stbi_write_bmp( "myfile.bmp", width, height, 4, pixels );
Обратите внимание, что также можно записывать другие форматы файлов по stbi_write_png
, stbi_write_tga
или stbi_write_jpg
.