LINUX.ORG.RU

Ubuntu 10.04 Qt4 jpeg support broken


0

0

Сегодня обнаружил что в Ubuntu 10.04 в списке поддерживаемых форматов изображений нет jpeg, хотя соответствующий плагин в папке /usr/lib/qt4/plugins/imageformats/ имеется (файл libqjpeg.so). Остальные изображения (png, bmp и пр.) загружаются нормально. Кто как победил эту проблему?

судя по убунтовскому пакету собирается он с поддержкой жпега. Чем список форматов смотрел? QImageReader::supportedImageFormats ?

nu11 ★★★★★ ()

Все чудесно работает:

#include <QApplication>
#include <QPixmap>
#include <QLabel>
#include <QImageReader>

int main(int argc, char *argv[]) {
	QApplication app(argc, argv);
	foreach (QByteArray imf, QImageReader::supportedImageFormats())
		qDebug("%s", imf.constData());
	QLabel lb;
	lb.setPixmap(QPixmap(":/images/yoba.jpg"));
	lb.show();
	return app.exec();
}
<!DOCTYPE RCC><RCC version="1.0">
	<qresource>
		<file>images/yoba.jpg</file>
	</qresource>
</RCC>
$ ./build/yobad 2>&1 | grep jpeg
jpeg
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.1 LTS"

anonymous ()

strace/ltrace. Скорее всего, в этом плагине есть какие-то undefined символы и он не может загрузиться

alex_custov ★★★★★ ()
Ответ на: комментарий от anonymous

Если делать как предлагает уважаемый аноним - то действительно все работает, но мне нужно решить несколько иную задачу, пишу следующий код:

  QString fname = QFileDialog::getOpenFileName(this);
  QPixmap pm = QPixmap(fname);
  if (pm.isNull())
  {
    qDebug() << "Image is null!";
  }
  else
  {
    scene->addPixmap(pm);
  }

Для всех картинок в формате png и bmp - код отрабатывает нормально, для jpg - выводится надпись «Image is null!». В других программах, способных открывать графические файлы, таких как Gimp, Eye of GNOME и т.п. картинки открываются нормально. Поэтому возникает вопрос: что я делаю не так?

P.s.

qDebug() << QImageReader::supportedImageFormats()

выводит:

("bmp", "pbm", "pgm", "png", "ppm", "xbm", "xpm")
Goganchic ★★ ()
Ответ на: комментарий от Goganchic

Изменил немного демку, по-прежнему всё работает:

#include <cstdlib>
#include <QApplication>
#include <QPixmap>
#include <QLabel>
#include <QImageReader>
#include <QDebug>
#include <QFileDialog>

int main(int argc, char *argv[]) {
	QApplication app(argc, argv);
	qDebug() << QImageReader::supportedImageFormats();

	QLabel lb;
	QString fname = QFileDialog::getOpenFileName(&lb); 

	QPixmap pm = QPixmap(fname); 
	if (pm.isNull()) { 
		qDebug() << "Image is null!"; 
		return EXIT_FAILURE;
	} 

	lb.setPixmap(pm);
	lb.show();
	return app.exec();
}
$ ./build/yobad 
("BW", "EPS", "EPSF", "EPSI", "EXR", "PCX", "PSD", "RGB", "RGBA", "SGI", "TGA", "XCF", "bmp", "bw", "dds", "eps", "epsf", "epsi", "exr", "gif", "ico", "jp2", "jpeg", "jpg", "mng", "pbm", "pcx", "pgm", "png", "ppm", "psd", "rgb", "rgba", "sgi", "svg", "tga", "tif", "tiff", "xbm", "xcf", "xpm", "xv")
$ echo $?
0
$ ldd ./build/yobad  | grep -i qt
    libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0x00160000)
    libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0x00bdc000)
$ dpkg -S /usr/lib/libQtGui.so.4
libqtgui4: /usr/lib/libQtGui.so.4
$ dpkg -S /usr/lib/libQtCore.so.4
libqtcore4: /usr/lib/libQtCore.so.4
$ apt-cache show libqtgui4 | grep -i version
Version: 4:4.6.2-0ubuntu5
$ apt-cache show libqtcore4 | grep -i version
Version: 4:4.6.2-0ubuntu5
Если что, у меня еще установлен пакет ubuntu-restricted-extras заради патентованных кодеков и чего-то там еще, может быть это сказалось на поддержке несвободных форматов в Qt?
$ apt-cache depends ubuntu-restricted-extras
ubuntu-restricted-extras
  Recommends: gstreamer0.10-plugins-ugly
  Recommends: gstreamer0.10-plugins-ugly-multiverse
  Recommends: ttf-mscorefonts-installer
 |Recommends: <adobe-flashplugin>
  Recommends: flashplugin-installer
  Recommends: unrar
  Recommends: gstreamer0.10-plugins-bad
  Recommends: gstreamer0.10-plugins-bad-multiverse
  Recommends: gstreamer0.10-ffmpeg
  Recommends: libavcodec-extra-52
  Recommends: gstreamer0.10-pitfdll
  Recommends: icedtea6-plugin
  Recommends: libmp4v2-0

anonymous ()

Ах да, забыл сказать, собираю я скунсом, возможно, что при сборке с помощью qmake/make нужно передавать какие-нибудь доплнительные директивы в pro-файл для включения этого самого JPG.

anonymous ()
Ответ на: комментарий от anonymous

самое странное, что у меня этот пример тоже работает, буду копаться дальше спасибо

Goganchic ★★ ()
Ответ на: комментарий от Goganchic

проблема наблюдается только если запускать приложение через QtCreator. Если запускать приложение из консоли - то все действительно хорошо. Будем гуглить...

Goganchic ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.