使用QByteArray中的libjpeg加载jpeg图像纹理

时间:2013-01-09 10:14:36

标签: c++ qt jpeg libjpeg qbytearray

嗨我有一张jpeg图像的QByteArray,我是从QNetworkReply获得的。我看到无处不在的jpeg图像从文件中读取并像这样解压缩,

FILE * infile;
......
if ((infile = fopen(filename, "rb")) == NULL) 
{
     fprintf(stderr, "can't open %s\n", filename);
     exit(1);
}
jpeg_stdio_src(&cinfo, infile);
jpeg_read_header(&cinfo, 0);
jpeg_start_decompress(&cinfo);

然后

while (scan lines remain to be read)
      jpeg_read_scanlines(...);

但是如何从QByteArray而不是文件/ stdio流中读取它?

2 个答案:

答案 0 :(得分:1)

使用

void jpeg_mem_src(j_decompress_ptr cinfo, unsigned char * inbuffer,
              unsigned long insize);

而不是jpeg_stdio_src

 QByteArray qarr;

 jpeg_decompress_struct cinfo;
 jpeg_mem_src(&cinfo, qarr.data(), qarr.size());
 jpeg_read_header(&cinfo, TRUE);
 jpeg_start_decompress(&cinfo);

 /// etc..

答案 1 :(得分:0)

您不需要使用外部jpeg库:

QByteArray array;
// read data into array here;

QPixmap image;
image.loadFromData(array);

应该足够了。 Qt将自动检测图像格式。如果您动态编译应用程序,请记住分发Qt jpeg插件。