qpixmap qclipboard 并保存图像倒置
Posted
技术标签:
【中文标题】qpixmap qclipboard 并保存图像倒置【英文标题】:qpixmap qclipboard and save image inverted 【发布时间】:2018-03-24 13:18:38 【问题描述】:环境:
Qt 4.7,Mac OS X 10.12.6
问题:
当我保存图像,或将其放在剪贴板中,然后从使用 Qt 4.7 构建的应用程序将其粘贴到 OS X 10.12.6 下时,生成的图像会垂直反转。我正在使用native
图形模式,因为 OS X 10.12 破坏了 raster
模式的 Qt 4.7 工具提示;从 10.6.8 到 10.11,保存和复制到剪贴板功能多年来一直正常工作,所以在那些 OS X 版本中,我使用raster
。在这种情况下,剪贴板图像(和保存的图像)不会反转。
这是我复制到剪贴板的操作:
QPixmap pm = QPixmap::grabWindow(uiframePlot->winId());
clipboard->setPixmap( pm, QClipboard::Clipboard);
QApplication::processEvents();
这是我为保存图像所做的:
QString qs = QDir::homePath() + scappath;
QPixmap pm = QPixmap::grabWindow(uiframePlot->winId());
pm.save(qs);
我试图找到一个“翻转像素图”功能,但没有成功。我的 Google-fu 可能在这里有所欠缺。我用“Qt 4.7”寻找“反转”、“翻转”和“变换”
任何人都可以为像素图提供指向基于 Qt 的本机(即 Qt 类的标准部分)“翻转”函数的指针吗?还是我需要写一个?
【问题讨论】:
你可能对 QImage::mirrored() 函数感兴趣,它可以水平或垂直翻转图像。不幸的是,没有 QPixmap 版本,但是使用 QPixmap::toImage() 可以很容易地将 QPixmaps 转换为 QImages 【参考方案1】:这是一个似乎可行的答案:
QPixmap pm = QPixmap::grabWindow(tmw->ui->frameScope->winId());
if (imageinvert)
QPixmap pmf = pm.transformed(QTransform().scale(1, -1));
clipboard->setPixmap( pmf, QClipboard::Clipboard);
else
clipboard->setPixmap( pm, QClipboard::Clipboard);
QApplication::processEvents();
【讨论】:
以上是关于qpixmap qclipboard 并保存图像倒置的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QWidget 中获取 QtDataVizualisation 的 QPixmap 并保存到文件?
Qt 编程指南10 QImage Mat QPixmap转换