用户将我们的应用程序安装到服务器 PC 上,将安装目录共享为网络驱动器 Z:现在从他商店的不同客户端 PC 上打开应用程序。一切正常,除了其中一台 PC 上有一个烦人的错误:
在问题 PC 上,该应用程序可以.jpg
很好地加载库存项目的文件并在 QLabel 中显示相应的 QPixmap。当他当前正在查看的库存项目还没有分配给它的图像时,他可以打开一个文件对话框,选择一个图像并正确显示它。但是,将(新的/更改的)QPixmap 保存为 a.jpg
将其作为黑色背景上的一系列彩色垂直线存储到磁盘:
保存是通过QPixmap::save( const QString & fileName, ...)
将文件名以编程方式设置为“ <some_id>.jpg
”来指定所需的文件格式。Returns true
,但生成的文件看起来像现代艺术。
但是,保存图像在服务器和其他客户端上工作正常。
服务器和问题 PC 都以相同的补丁级别运行 Windows XP。
进程资源管理器显示服务器和问题 PC 上的应用程序进程的相同 DLL,但问题 PC 使用dnsapi.dll
,而服务器没有。
Process Explorer 还显示,在服务器和客户端上,用于处理 JPEG 的 Qt DLL 都是
\Device\LanmanRedirector\<server>\<app>\plugins\imageformats\qjpeg4.dll
,并且在问题 PC 上的驱动器范围内搜索为qjpeg*.dll
空,因此应用程序应该在两台计算机上使用相同的 JPEG 处理代码。
有什么建议么?
(编辑:在问题描述中添加了操作系统和补丁状态。)
编辑:解决方案:在问题机器上,我们有 16 bpp 颜色深度。将其设置为 32 bpp 立即解决了我们的问题。我还替换
_pm.save( sDestFileName )
了,
_pm.toImage().convertToFormat( QImage::Format_RGB32 ).save( sDestFileName )
这样我们就不会在每台运行低于 32 bpp 的旧客户端 PC 上遇到这个问题。