Jpeg 在发布版本中使用 QImage 读取错误

Posted

技术标签:

【中文标题】Jpeg 在发布版本中使用 QImage 读取错误【英文标题】:Jpeg read errors using QImage in release builds 【发布时间】:2013-01-15 15:21:39 【问题描述】:

有没有人在尝试加载 jpeg 图像时使用 Qt 和 QImage 的类加载方法遇到问题。加载在使用 QtCreator 的调试模式下完美运行,但在构建应用程序并随后在发布模式下运行时尝试加载相同的 jpeg 图像时完全失败。

QImage myImage;
QString s = QDir().toNativeSeparators(QFileDialog::getOpenFileName(this, QString("Import Image...")));
if ( !myImage.load(s) ) 
    QMessageBox msgBox;
    msgBox.setWindowTitle(this->windowTitle());
    msgBox.setWindowIcon(this->windowIcon());
    msgBox.setIcon(QMessageBox::Information);
    msgBox.setText("Image could not be loaded.");
    msgBox.exec();
    return;

我已经得出结论,我可能缺少一个特定的动态链接库,但无法预见它会是哪一个。请注意,在发布模式下,我仍然可以处理 PNG 图像。

【问题讨论】:

您使用的是 Windows 还是 Linux?如果您使用 QtCreator 运行发布版本,它可以工作吗? jpg 插件可能吗? ***.com/questions/2241141/…***.com/questions/12800346/… 是 jpeg 的工作,当我从 QtCreator 中的发布版本运行应用程序时,而不是当我将它部署到独立窗口时。是的,使用 Windows。除 jpeg 加载外,一切正常。 所以缺少 jpg 插件。 Stack Overflow 中关于同一个问题的问题大约有十几个(以及答案)。 【参考方案1】:

将 imageplugins(或 imageformats)文件夹添加到您的构建中。使用 jpg 需要 libjpeg.dll 可用于可执行文件。在 Qt 安装目录下查找所需文件。

【讨论】:

我已经这样做了,但没有成功,我的 imageformats 文件夹包含 qgif2.dll、qico4.dll、qjpeg4.dll、qmng4.dll、qsvg4.dll、qtiff4.dll。 我的文件夹包含:qgif4.dll、qgifd4.dll、qico4.dll、qicod4.dll、qjpeg.dll、qjpeg4.dll、qjpegd4.dll、qmng4.dll、qmngd4.dll、qsvg4。 dll、qsvgd4.dll、qtga4.dll、qtgad4.dll、qtiff4.dll、qtiffd4.dll 仍然无法加载 jpeg 图片 尝试将 imageformats 文件夹与您的可执行文件放在可以找到 dll 的位置。 我能够在发行版中打开的唯一图像是 png 文件。我可以在 Qt 中访问所有类型的图像,但在分发时只能访问 png。【参考方案2】:

您的应用程序所需的 dll 之一可能在您的 PATH 环境变量中找不到。您可以使用Dependency Walker 来发现缺少哪些 dll。

【讨论】:

我试图在我的发布 exe 中包含 plugins/imageformats 文件夹。我已经得出结论,不可能发布支持 jpeg 的 qt exe。 甚至尝试了 QString sDir = QCoreApplication::applicationDirPath(); a.addLibraryPath(sDir+"/plugins"); 不可能,因为我已经完成了。你检查过 Dependency Walker 的输出吗?

以上是关于Jpeg 在发布版本中使用 QImage 读取错误的主要内容,如果未能解决你的问题,请参考以下文章

pyqt5 qimage 读取内存数据

如何在 Qt 中将 tiff 或 pnm 转换为 jpeg

将CV2 numpy数组转换为QImage时如何配置颜色?

QT 三大绘图类:QPixmap/QImage/QPicture

QImage 加载某些图像的方向错误

使用 QImage::setText() 将二进制数据存储在 PNG 文件中