Загрузка изображения с использованием QPixmap - PullRequest
4 голосов
/ 10 мая 2011

У меня есть файл изображения, как C:/44637landscapes-2007.jpg

Я хочу загрузить этот файл, используя QPixmap, используя PySide

Я попытался следующим образом.* Но документация говорит как QPixmap(':/xxxxxx.jpeg').Что означает ':'

Как загрузить изображение в 'C:\'?

РЕДАКТИРОВАТЬ: проблема была при попытке загрузить "JPEG".Он смог загрузить "PNG", без проблем.Так что еще мне нужно сделать, чтобы загрузить "JPEG"?

Спасибо, Jijoy

Ответы [ 3 ]

4 голосов
/ 12 мая 2011

Qt делает что-то странное с изображениями. Если вы используете только pngs, у вас никогда не будет проблем. Обработка других форматов изображений выполняется немного по-другому.

Если вы посмотрите в свой каталог Qt (где находятся все двоичные файлы и исходный код), вы найдете каталог с именем: plugins\imageformats

В этом каталоге есть тонна dlls (или .so) по одному для каждого формата изображения, поддерживаемого Qt. В вашем случае я полагаю, что вас интересует qjpeg4.dll

Теперь, когда вы запустите ваше приложение и попытаетесь использовать jpeg, Qt попытается загрузить этот плагин, но если он не сможет его найти, ваше изображение не будет отображаться.

У нас была похожая проблема с файлами ico. Он работал в нашей среде разработки, потому что папка Qt была в нашем PATH,, и поэтому он волшебным образом нашел этот плагин. Однако, когда мы выпускали наше программное обеспечение, мы распространяли только те библиотеки, которые нам были нужны, и поэтому оно не работало.

После долгих расследований вот что мы сделали:

  • Наше приложение находится в каталоге bin /. Это где exe, и все библиотеки Qt помещены. QtCore4.dll и QtGui4.dll и т.д ...

  • В каталоге bin мы создаем подкаталог с именем 'imageformats'

  • Положите qjpeg4.dll и любые другие подключаемые модули изображений, которые вам могут понадобиться.

  • Измените код следующим образом:

    QApplication _App(argc, argv);

    // Find the path of your bin directory - whereever your exe resides.

    QString _Path = _PathToBin + QString(QDir::separator()) + "imageformats");

    // This line is providing a path to Qt telling it to look here for plugins QApplication::addLibraryPath(_Path);

    // Initialize the main form

    return _App.exec();

    Это должно убедиться, что Qt знает о плагине обработки jpeg, и загрузить ваше изображение в UI.

4 голосов
/ 10 мая 2011

Вы можете создать экземпляр QPixMap, указав путь к файлу.Какую ошибку вы получаете, когда пробуете свой код?Измените ваш код на что-то вроде:

pixmap = QPixMap(r'C:\filename.jpeg')

В документации вы ссылаетесь на способ загрузки ресурса Qt.Можно преобразовать изображение, необходимое приложению, в ресурс Qt, чтобы загрузить его независимо от платформы.Инструкции для этого см. В документации Qt Resource System .

3 голосов
/ 12 мая 2011

Если вы пытаетесь собрать свой код Python в исполняемый файл, это покрывает проблему для файлов .ico, но процесс для JPEG такой же: PyQt / PySide - отображение значков

Если у вас проблемы с запуском из установленного интерпретатора, тогда ваша переменная пути, вероятно, установлена ​​неправильно, ваш файл qt.conf (в основном каталоге python) удален / изменен или у вас нет qjpeg4. DLL, где он должен быть (<python dir>\Lib\site-packages\PySide\plugins\imageformats).

Мой qt.conf выглядит так:

[Paths]
Prefix = C:/Python27/lib/site-packages/PySide
Binaries = .
Plugins = plugins
Translation = translation

C:/Python27/lib/site-packages/PySide является частью моей системной переменной PATH и впереди любых каталогов PyQt (или других Qt).

...