将QPixmap保存为JPEG失败(Qt 4.5)

3
我有以下代码。
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。
我正在使用dlls,Qt不在路径上。
我刚意识到我正在静态链接到一个传统的第三方jpeg.lib(独立JPEG组的JPEG软件),该库被其他库使用。
可能会因此导致冲突或其他问题吗?
还是插件没有正确加载?
3个回答

5

可能无法找到插件...

您可以将库路径添加到项目中,或者只需将imageformats文件夹放在二进制文件附近。

imageformats文件夹位于插件中..

(也许您也无法显示JPEG图像)


我认为最终我们通过将Qt插件目录中的imageformats文件夹放入项目目录,然后也放入发布轨迹中来解决了它。 - Denis C

4

你的插件很可能缺失,最好的方法是只列出工具包支持的图像格式。

这个例子来自我的插入图片,但你应该能够为你的另存为做出调整:

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
如果您正在进行静态构建,需要在您的.pro文件中添加QTPLUGIN += qjpeg,这样图像格式的静态jpeg库就会与您的应用程序链接起来。

我没有进行静态构建(至少我是这么认为的)。 我的应用程序在exe文件所在的目录中没有QtCore4.dll和QtGui4.dll时无法运行。 尽管已经将以下库文件提供给链接器: c:\Qt\4.5.1\lib\QtGui4.lib c:\Qt\4.5.1\lib\QtCore4.lib 但我知道通常需要提供一个“桥接”文件,以便编译器知道这些内容将会以dll的形式出现。我将尝试在.pro文件中添加QTPLUGIN += qjpeg, 看看是否会有所不同。 - Denis C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接