OpenGL — Как я могу конвертировать unsigned char * в файл изображения (например, JPG) в C ++?

У меня есть приложение opengl, которое создает одну текстуру в формате unsigned char *, и я должен сохранить эту текстуру в одном файле изображения, но я не знаю, как это сделать. Кто-нибудь может мне помочь?

это мое создание этой текстуры:

static unsigned char* pDepthTexBuf;

и это мой код, который использует эту текстуру:

glBindTexture(GL_TEXTURE_2D, depthTexID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texWidth, texHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, pDepthTexBuf);

но как я могу сохранить эту текстуру «pDepthTexBuf» в файле изображения?

-2

Решение

Это очень сложный вопрос … Я предлагаю обратиться к другим публичным примерам, таким как этот: http://www.andrewewhite.net/wordpress/2008/09/02/very-simple-jpeg-writer-in-c-c/

По сути, вам нужно интегрировать библиотеку изображений, а затем использовать любые поддерживаемые хуки для сохранения ваших данных.

1

Другие решения

Самый простой подход, вероятно, заключается в использовании библиотеки, такой как OpenCV, которая имеет некоторые очень простые в использовании механизмы для преобразования байтовых массивов данных RGB в файлы изображений.

Вы можете увидеть пример чтения буфера изображений OpenGL и сохранения его в виде файла PNG. Вот. Сохранение JPG может быть так же просто, как изменение расширения выходного файла.

// Create an OpenCV matrix of the appropriate size and depth
cv::Mat img(windowSize.y, windowSize.x, CV_8UC3);
glPixelStorei(GL_PACK_ALIGNMENT, (img.step & 3) ? 1 : 4);
glPixelStorei(GL_PACK_ROW_LENGTH, img.step / img.elemSize());
// Fetch the pixels as BGR byte values
glReadPixels(0, 0, img.cols, img.rows, GL_BGR, GL_UNSIGNED_BYTE, img.data);

// Image files use Y = down, so we need to flip the image on the X axis
cv::flip(img, img, 0);

static int counter = 0;
static char buffer[128];
sprintf(buffer, "screenshot%05i.png", counter++);
// write the image file
bool success = cv::imwrite(buffer, img);
if (!success) {
throw std::runtime_error("Failed to write image");
}
1

По вопросам рекламы [email protected]