Ошибка сохранения QPixmap в JPEG (Qt 4.5) - PullRequest
3 голосов
/ 17 июля 2009

У меня есть следующий код.

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 для Independent JPEG Group), которое используется другой библиотекой.

Возможно ли, что из-за этого возникнет конфликт или что-то еще?

Или просто плагин загружен неправильно.

Ответы [ 3 ]

5 голосов
/ 17 июля 2009

вероятно, он не может найти плагин ...

Вы можете добавить путь к библиотеке в проект или просто поместить папку imageformats рядом с вашим двоичным файлом.

папка imageformats находится в плагинах ..

(возможно, вы не можете отображать изображения JPEG также)

4 голосов
/ 07 августа 2009

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

Этот пример взят из моей вставки, но вы можете адаптировать его для сохранения как:

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);

Также мы иногда теряем форматы, если разработчик копирует отладочную сборку на компьютер QA. Отладочная версия будет искать подключаемые модули и не сможет их загрузить.

4 голосов
/ 17 июля 2009

Если вы делаете статическую сборку, вам нужно добавить QTPLUGIN += qjpeg в ваш файл .pro, чтобы статическая библиотека jpeg форматов изображений была связана с вашим приложением.

...