QImage из неподписанного буфера символов (формат jpg) - PullRequest
4 голосов
/ 12 декабря 2011

У меня есть буфер типа unsigned char*, который я заполняю изображением JPG. Я хочу использовать этот буфер для рисования изображения на экране моего приложения в QLabel.

Я сделал это, но изображение неверное.

Может кто-нибудь сказать мне, что лучший способ сделать это?

QPixmap pix = QPixmap::fromImage(
     QImage(buff, 460, 345, QImage::Format_RGB888)); //Not sure what format to use for a jpg image?

one_img->setPixmap(pix);  //one_img is of type QLabel.

Ответы [ 4 ]

6 голосов
/ 12 декабря 2011

QImage::load или конструктор QImage ожидают, что буфер изображения будет в несжатом формате.

Если вы не собираетесь изменять изображение, используйте QPixmap и его функцию loadFromData():

QPixmap pix;
pix.loadFromData(buff, sizeOfBuff, "JPG");

Вы также можете загрузить буфер Jpeg с помощью QImage::fromData / QImage::loadFromData или QImageReader + QBuffer.

0 голосов
/ 12 декабря 2011

Правильный способ - не интерпретировать данные jpg как формат RGB и использовать соответствующий класс, например, QImageReader , или событие, использующее конструктор для прямой загрузки изображения.

0 голосов
/ 12 декабря 2011

вы сказали, что заполняете буфер jpg, поэтому кажется, что изображение уже сохранено.В таком случае лучше всего использовать:

<code> QPixmap ( const QString & fileName, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor )

, где:

filename is the path to the image 
format is in your case "JPG" or JPEG 
flags  is to specify if the image is black white or color (see the documentation for details)
0 голосов
/ 12 декабря 2011

Вероятно, это связано с форматом изображения. Это зависит от того, как вы загружаете изображение в буфер. QImage ожидает найти сохраненное изображение построчно в предоставленном буфере.

Попробуйте форматы изображений Format_Indexed8 или Format_RGB32. Если он все еще не работает, сообщите нам, как вы загрузили изображение jpeg в буфер.

Обратите внимание, что QImage предоставляет конструктору имя файла изображения в качестве аргумента.

...