任何C ++示例都可用于将从glReadPixels获得的原始像素数据转换为JPEG格式并返回?
答案 0 :(得分:2)
您可以使用ImageMagick库将原始数据转换为jpeg图像数据,反之亦然。使用相同的库,您可以将jpeg图像数据转换为原始(RGB)数据。
答案 1 :(得分:1)
使用外部库。
我会推荐DevIL,这是您用来处理图像文件的头号瑞士军刀。你只需要
glReadPixels
以使用从GL帧缓冲区读取的像素填充您的DevIL图像,ilSaveImage("foo.jpg")
以保存文件。您还可以使用bmp
,png
以及更多 - 格式将从文件名中自动检测。简单。
答案 2 :(得分:0)
我不确定OpenGL是否支持处理JPEG图像。这不是图书馆真正的用途。
一旦您可以访问像素数据,您应该能够轻松地使用OpenCV将图像写入JPEG(或任何其他格式)。这里有一些伪代码可以帮助你。
/*
* On Linux, compile with:
*
* g++ -Wall -ggdb -I. -I/usr/include/opencv -L /usr/lib -lm -lcv -lhighgui -lcvaux filename.cpp -o filename.out
*/
#include <cv.h>
#include <highgui.h>
/*
* Your image dimensions.
*/
int width;
int height;
CvSize size = cvSize(width, height);
/*
* Create 3-channel image, unsigned 8-bit per channel.
*/
IplImage *image = cvCreateImage(size, IPL_DEPTH_8U, 3);
for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
{
unsigned int r;
unsigned int g;
unsigned int b;
/*
* Call glReadPixels, grab your RGB data.
* Keep in mind that OpenCV stores things in BGR order.
*/
CvScalar bgr = cvScalar(b, g, r);
cvSet2D(image, i, j, bgr);
}
cvSaveImage("filename.jpg", image);
cvReleaseImage(&image);
如果你环顾四周,也存在其他用于处理JPEG的库。