1

嗨,我有一个从 QNetworkReply 获得的 jpeg 图像的 QByteArray。我到处都能看到从文件中读取并解压缩的 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 流中读取它?

4

2 回答 2

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..
于 2013-01-17T12:16:57.923 回答
0

您不需要使用外部 jpeg 库:

QByteArray array;
// read data into array here;

QPixmap image;
image.loadFromData(array);

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

于 2013-01-09T11:11:41.657 回答