【发布时间】:2011-08-22 14:21:43
【问题描述】:
用户将我们的应用程序安装到服务器 PC,将安装目录共享为网络驱动器 Z:现在从他商店的不同客户端 PC 上打开应用程序。一切正常,除了其中一台 PC 上的一个棘手的错误:
在问题 PC 上,该应用可以很好地加载库存项目的 .jpg 文件,并在 QLabel 中显示相应的 QPixmap。当他当前正在查看的库存项目还没有分配给它的图像时,他可以打开一个文件对话框,选择一个图像并正确显示它。但是,保存(新的/更改的)QPixmap 为.jpg 将其作为黑色背景上的一系列彩色垂直线存储到磁盘:
通过QPixmap::save( const QString & fileName, ...) 完成保存,文件名以编程方式设置为“<some_id>.jpg”以指定所需的文件格式。返回true,但生成的文件看起来像现代艺术。
但是,保存图像在服务器和其他客户端上工作正常。
服务器和问题 PC 都以相同的补丁级别运行 Windows XP。
进程资源管理器为服务器和问题 PC 上的应用程序进程显示相同的 DLL,除了使用 dnsapi.dll 的问题 PC,服务器没有。
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 上遇到这种情况。
【问题讨论】: