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 并保存到文件?

QPixmap 在 Qt 中加载许多图像

Qt 编程指南10 QImage Mat QPixmap转换

如何在Python 3中将QImage(QPixmap)转换为PIL图像?

使用 QPixmap 加载图像

如何从 QGraphicsView 保存图像?