相关文章推荐
难过的大熊猫  ·  使用yarn+env-cmd时,如何在cre ...·  4 月前    · 
发财的李子  ·  js 使用预签名(presigned) ...·  3 月前    · 
玩命的葫芦  ·  在客户端直接上传文件到OSS-对象存储(OS ...·  3 月前    · 
没有腹肌的围巾  ·  Google試算表與Google App ...·  3 月前    · 
健壮的野马  ·  如何使用vim删除每行中的最后一个字符?开发者社区·  3 月前    · 
玩篮球的登山鞋  ·  不要让你的朋友圈空空如也_沉默·  1 年前    · 
打酱油的书签  ·  爱责speak文化浅唱 - 百度·  2 年前    · 
小胡子的煎饼果子  ·  什么是深度学习?(从函数逼近论的角度来理解)·  2 年前    · 
潇洒的斑马  ·  老钱日日谈 - 雪球·  2 年前    · 
重情义的电池  ·  该死的阿修罗 - ...·  3 年前    · 
Code  ›  将QPixmap保存为竖线中的JPEG结果开发者社区
jpeg格式 软件
https://cloud.tencent.com/developer/ask/sof/109212493
小眼睛的毛豆
3 年前
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
提问
问 将QPixmap保存为竖线中的JPEG结果
Stack Overflow用户
提问于 2011-08-22 14:21:43
EN

一位用户将我们的应用程序安装到服务器PC上,将安装目录共享为网络驱动器Z:然后在他的商店里打开来自不同客户端PC的应用程序。除了其中一台电脑上的一个唠叨的bug之外,一切都很好:

在问题PC上,应用程序可以很好地加载库存物品的 .jpg 文件,并在QLabel中显示相应的QPixmap。当他当前正在查看的库存物品还没有分配图像时,他可以打开一个文件对话框,选择一个图像并正确地显示它。但是,将(新的/更改的) QPixmap保存为 .jpg ,将其存储到磁盘上,作为黑色背景上的一系列彩色垂直线:

​

​

保存是通过 QPixmap::save( const QString & fileName, ...) 完成的,文件名以编程方式设置为" <some_id>.jpg “,以指定所需的文件格式。返回 true ,但结果文件看起来像现代艺术。

但是,保存映像在服务器和其他客户端上运行得很好。

服务器和问题PC在相同的修补程序级别上运行Windows。

Process为服务器上的应用程序进程和问题PC显示相同的DLL,除了使用 dnsapi.dll 的问题PC,而服务器不使用。

Process还显示,在服务器和客户端上,用于处理JPEG的Qt都是 \Device\LanmanRedirector\<server>\<app>\plugins\imageformats\qjpeg4.dll ,在 qjpeg*.dll 问题PC上进行的全驱动器搜索结果为空,因此应用程序应该在两台计算机上使用相同的JPEG处理代码。

有什么建议吗?

(编辑:将操作系统和补丁状态添加到问题描述中。)

编辑:解决方案: 在问题机器上我们有一个16 bpp的颜色深度。将其设置为32 bpp立即解决了我们的问题。我也取代了

  `_pm.save( sDestFileName )`

使用

  `_pm.toImage().convertToFormat( QImage::Format_RGB32 ).save( sDestFileName )`

这样我们就不会在每台运行小于32 bpp的老客户端PC上遇到这种情况。

1 2K 0 票数 1
EN
c++
qt
dll
jpeg
qpixmap

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-22 15:43:58

这里有几件事情试图隔离这个问题:

  • 将qjpeg4.dll复制到客户端的工作目录
  • 保存为PNG或GIF时,图像是否已损坏?
  • 将数据转换为QImage并从中工作。
  • 考虑一下字节格式(我通常使用ARGB32,因为它是int对齐的)
  • 要测试问题发生在何处,您可以尝试将图像转换为JPG格式,然后在调试窗口中查看它。

下面的函数来自我编写的一个 OSS程序 。您可以尝试使用它,然后显示第二个参数中引用的QImage的内容:

//! Saves image with JPEG compression in given quality (0 - 100, Qt's scale)
//! @param[in] in The lossless input image
//! @param[out] out The image to save to using JPEG compression
//! @param quality The quality level (0 - 100, 0 the most compressed)
//! @return The size of the saved image
quint32 Window::imageSaveLossy(QImage &in, QImage &out, quint8 quality)
        quint32 retval;
        QByteArray ba;
        QBuffer buffer(&ba);
        buffer.open(QIODevice::WriteOnly);
        QImage temp(in.size(), QImage::Format_ARGB32);
        temp.fill(QColor(Qt::white).rgb());
        QPainter painter(&temp);
        painter.drawImage(0, 0, in);
 
推荐文章
难过的大熊猫  ·  使用yarn+env-cmd时,如何在create-react-app的public目录JS文件注入环境变量?
4 月前
发财的李子  ·  js 使用预签名(presigned) url 上传文件到 AWS S3服务(解决生成的文件格式错误问题)_getpresigneduploadurl
3 月前
玩命的葫芦  ·  在客户端直接上传文件到OSS-对象存储(OSS)-阿里云帮助中心
3 月前
没有腹肌的围巾  ·  Google試算表與Google App Script的自動化應用
3 月前
健壮的野马  ·  如何使用vim删除每行中的最后一个字符?开发者社区
3 月前
玩篮球的登山鞋  ·  不要让你的朋友圈空空如也_沉默
1 年前
打酱油的书签  ·  爱责speak文化浅唱 - 百度
2 年前
小胡子的煎饼果子  ·  什么是深度学习?(从函数逼近论的角度来理解)
2 年前
潇洒的斑马  ·  老钱日日谈 - 雪球
2 年前
重情义的电池  ·  该死的阿修罗 - 720P|1080P高清下载 - 港台电影 - BT天堂
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号