QT中图像的重叠

时间:2015-07-25 08:11:49

标签: qpainter qimage qt4.8

我有两张照片。我需要超级强加/重叠图像。第一个图像或基本图像的大小为160x128,第二个图像为120x100。我如何相互重叠?

这是我的代码,我把它作为参考:

https://idvlpsw.wordpress.com/2008/03/19/use-qimage-to-create-a-composite-image-ie-one-image-with-another-overlaid-on-top-of-it/

#include "mainwindow.h"
#include <QApplication>
#include "mainwindow.h"
#include <QPixmap>
#include <QFile>
#include <QLabel>
#include <QPainter>


QLabel *lbl= NULL ;

QImage baseImage("/usr/image1.jpg");
QImage overlayLogoff("/usr/image2.jpg");


QImage createImageWithOverlay(const QImage& baseImage, const QImage& overlayImage)
{
    QImage imageWithOverlay = QImage(baseImage.size(), QImage::Format_RGB16);
    QPainter painter(&imageWithOverlay);

    painter.setCompositionMode(QPainter::CompositionMode_Source);
    painter.fillRect(imageWithOverlay.rect(), Qt::transparent);

    painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
    painter.drawImage(0, 0, baseImage);

    painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
    painter.drawImage(0, 0, overlayImage);

    painter.end();

    return imageWithOverlay;
}

QImage logoffImage = createImageWithOverlay(baseImage, overlayLogoff);

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    lbl = new QLabel();

    createImageWithOverlay(baseImage, overlayLogoff);
return a.exec();
}

这里我无法获得任何图像?我是否需要使用show功能来显示图像。

请帮忙。谢谢

1 个答案:

答案 0 :(得分:0)

查看您的代码,我想您正在尝试在QLabel中显示合成图像。
但是要使此代码起作用,合成图像必须附加到QLabel,并且必须使QLabel本身可见:

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);

   QLabel * lbl = new QLabel();
   QImage composite = createImageWithOverlay(baseImage, overlayLogoff);
   lbl->setPixmap(QPixmap::fromImage(composite));
   lbl->show();

   return a.exec();
}

PS:你应该尽量避免在全局范围内定义变量。