Russian Qt Forum

Qt => Вопросы новичков => Тема начата: alexey11111 от Март 09, 2012, 15:33



Название: проблема с сохранением 8-битного JPEG
Отправлено: alexey11111 от Март 09, 2012, 15:33
Добрый день!
Есть 8-битное 256-grayscale изображение, получаемое с некоторого USB-устройства. Яркости пикселей этого изображения хранятся в матрице Img размером Width*Height.

Создаю новое изображение QImage:
Код:
QImage Picture = QImage((const unsigned char*)(Img),
                                 Width, Height, QImage::Format_Indexed8);


Далее конвертирую PIcture в QPixmap и сохраняю полученную картинку в JPEG файл:
Код:
QPixmap  SPicture =  QPixmap::fromImage(Picture);
SPicture.save("PICTURE.jpeg");

Все работает, в сохраненном файле получается требуемая серая картинка. Но есть одна проблема - изображение сохраняется с глубиной цвета 24 бит, а нужно 8 бит.

Пробовал сохранять в jpeg файл QImage без конвертации в QPixmap:
Код:
Picture.save("PICTURE.jpeg");
Изображение сохраняется в 8 битке, но вместо картинки получается черное пятно на светлом фоне.
Подскажите, что делать?
Заранее спасибо.


Название: Re: проблема с сохранением 8-битного JPEG
Отправлено: Igors от Март 09, 2012, 19:58
Насколько мне известно, jpeg всегда 24-битный. По-моему, можно задавать 8-битные палитры в gif и png. Поправьте, если я ошибаюсь.
Нет, grayscale поддерживается (во всяком случае самой libJPG).


Название: Re: проблема с сохранением 8-битного JPEG
Отправлено: sudo от Март 11, 2012, 10:11
QImage QImage::convertToFormat ( Format format, Qt::ImageConversionFlags flags = Qt::AutoColor ) const

QImage::Format_Indexed8   3   The image is stored using 8-bit indexes into a colormap.

bool QImage::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const