Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
opengl像素数据到jpeg < >任何C++示例都可以将从GLL像素获得的原始像素数据转换为JPEG格式,并且返回.< P>我不确定OpenGL是否支持处理JPEG图像。这不是图书馆真正的用途_Opengl_Jpeg_Libjpeg - Fatal编程技术网

opengl像素数据到jpeg < >任何C++示例都可以将从GLL像素获得的原始像素数据转换为JPEG格式,并且返回.< P>我不确定OpenGL是否支持处理JPEG图像。这不是图书馆真正的用途

opengl像素数据到jpeg < >任何C++示例都可以将从GLL像素获得的原始像素数据转换为JPEG格式,并且返回.< P>我不确定OpenGL是否支持处理JPEG图像。这不是图书馆真正的用途,opengl,jpeg,libjpeg,Opengl,Jpeg,Libjpeg,一旦你获得了对像素数据的访问权,你应该能够轻松地用它将图像写入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 <hi

一旦你获得了对像素数据的访问权,你应该能够轻松地用它将图像写入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);
/*
*在Linux上,使用以下命令编译:
*
*g++-Wall-ggdb-I.-I/usr/include/opencv-L/usr/lib-lm-lcv-lhighgui-lcvaux filename.cpp-o filename.out
*/
#包括
#包括
/*
*你的图像尺寸。
*/
整数宽度;
内部高度;
CvSize尺寸=CvSize(宽度、高度);
/*
*创建3通道映像,每个通道无符号8位。
*/
IplImage*image=cvCreateImage(大小,IPL\U深度\U 8U,3);
对于(int i=0;i

如果您环顾四周,还可以使用其他用于处理JPEG的库。

您可以使用ImageMagick库将原始数据转换为JPEG图像数据,反之亦然。使用相同的库,您可以将jpeg图像数据转换为原始(RGB)数据。

为此使用外部库

我推荐你,你处理图像文件的第一把瑞士军刀。你只需要

  • 通过DevIL在内存中创建RGB图像
  • 调用
    glReadPixels
    用从GL帧缓冲区读取的像素填充魔鬼图像
  • 调用
    ilSaveImage(“foo.jpg”)
    保存文件。您还可以使用
    bmp
    png
    和其他一些方法-格式将从文件名中自动检测

很简单。

我想可能是libjpeg。是的,任何图像库都可以。这是一件非常常规的事情,所以我怀疑代码看起来会有很大的不同。我在libjpeg中找不到任何内存中的压缩函数。是否存在任何在内存压缩/解压缩中显示的C++代码(与写入文件相反),可以将图像保存到文件中,然后将其读回内存,如果您真的想要的话。或者,如果您真的非常绝望,您可以在写入文件之前分解libjpeg代码以公开编码的比特流。但是你为什么要这样呢?另外,看看OpenCV的imencode函数:为什么上面有JPEG2000标签?JPEG和JPEG2K是完全不同的野兽。我们可以在JPEG2K中也这样做吗?我从未使用过jpeg2k。有指针吗?jpeg2k只是一种不同的有损图像格式。如果您选择使用的库支持jpeg2k格式,那么在“jpeg2k”中执行您想要的操作将与任何其他格式相同(请参阅以获取支持库的列表)。