Загрузите текстуру изображения в формате jpeg с помощью libjpeg из QByteArray

Привет у меня есть QByteArray изображения в формате JPEG, которое я получил из 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 вместо потока file / stdio?

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

Другие решения

Вам не нужно использовать внешнюю библиотеку JPEG:

QByteArray array;
// read data into array here;

QPixmap image;
image.loadFromData(array);

должно быть достаточно. Qt автоматически определит формат изображения. Просто не забудьте распространить плагин Qt jpeg, если вы динамически компилируете свое приложение.

0

По вопросам рекламы [email protected]