Сбой при сохранении QPixmap в JPEG (Qt 4.5)
Вопрос
У меня есть следующий код.
QString fileName = QFileDialog::getSaveFileName(
this,
tr("Output Image file"),
(""),
tr("PNG (*.png);;JPEG (*.JPEG);;Windows Bitmap (*.bmp);;All Files (*.*)")
);
if(fileName != "")
{
QwtPlot* pPlot = ...
QSize size = pPlot->size();
QRect printingRect(QPoint(0, 0), size);
QPixmap pixmapPrinter(size);
pixmapPrinter.fill(Qt::white);
{
QPainter painter(&pixmapPrinter);
pPlot->print(&painter, printingRect);
}
bool isOk = pixmapPrinter.save(fileName);
if(!isOk)
{
QString msgText = tr("Failed to write into ") + fileName;
QMessageBox::critical(this, tr("Error Writing"), msgText);
}
}
Итак, путь выглядит следующим образом:- Появляется диалоговое окно файла - пользователь выбирает формат и файл - система рисует график на QPixmap - Сохраняет QPixmap в файл.
Это работает для PNG и BMP без проблем, но для JPEG, jpg, JPG и т.д. Это не удается.
Я просмотрел всю документацию Qt, но не смог найти никаких подробностей.Это просто должно сработать.Есть какие-нибудь идеи?
Я использую коммерческую версию Qt, 4.5.1 для Windows.
Я использую библиотеки dll, Qt отсутствует в пути.
Я только что понял, что статически связываюсь с классическим сторонним jpeg.lib (программное обеспечение Независимой JPEG-группы JPEG), которое используется другой библиотекой.
Возможно ли, что из-за этого возникает конфликт или что-то еще?
Или это просто из-за того, что плагин не загружен должным образом.
Решение
вероятно, он не может найти плагин...
вы можете добавить путь к библиотеке project или просто поместить папку imageformats рядом с вашим двоичным файлом.
папка imageformats находится в разделе плагины..
(вероятно, вы тоже не можете отображать изображения в формате jpeg)
Другие советы
Если вы создаете статическую сборку, вам необходимо добавить QTPLUGIN += qjpeg
в ваш файл .pro, чтобы статическая библиотека jpeg imageformats была связана с вашим приложением.
Ваш плагин, скорее всего, отсутствует, лучший способ работать - перечислять только форматы изображений, которые поддерживает инструментарий.
Этот пример взят из моей картинки insert, но вы должны быть в состоянии адаптировать его для сохранения как:
QString fileFormats = "(";
/* Get all inputformats */
for (int i = 0; i < QImageReader::supportedImageFormats().count(); i++) {
fileFormats += "*."; /* Insert wildcard */
fileFormats
+= QString(QImageReader::supportedImageFormats().at(i)).toLower(); /* Insert the format */
fileFormats += " "; /* Insert a space */
}
fileFormats += ")";
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"),
currentPath, tr("Images ") + fileFormats);
Также мы иногда теряем форматы, если разработчик копирует отладочную сборку на компьютер контроля качества.Отладочная версия будет искать отладочные плагины и не сможет их загрузить.