用libjpeg从QByteArray加载jpeg图像纹理

Load jpeg image texture with libjpeg from QByteArray

本文关键字:jpeg 图像 纹理 加载 QByteArray libjpeg      更新时间:2023-10-16

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

FILE * infile;
......
if ((infile = fopen(filename, "rb")) == NULL) 
{
     fprintf(stderr, "can't open %sn", 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流读取它?

使用

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..

您不需要使用外部jpeg库:

QByteArray array;
// read data into array here;
QPixmap image;
image.loadFromData(array);

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