嗨我有一张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流中读取它?
答案 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插件。