直接上源码,下面是三张png图片依次从上往下拼接起来的,如果想要叠加效果的(因为png图片支持透明),则改变drawImage拷贝图片起始位置即可:
QImage createImageWithOverlay(const QImage& baseImage,
const QImage& overlayImage1,
const QImage& overlayImage2)
{
QImage imageWithOverlay = QImage(baseImage.size().width(),
baseImage.size().height()*3, //输出的图片按照第一张图片的3倍高
QImage::Format_ARGB32_Premultiplied);
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,
baseImage.size().height()*1, //如果叠加,起始坐标全部改为0,0
overlayImage1);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.drawImage(0,
baseImage.size().height()*2, //如果叠加,起始坐标全部改为0,0
overlayImage2);
painter.end();
return imageWithOverlay;
}
使用:
//将“源图片1、2、3”依次从上往下拼接
QImage base1(":/pic/1.png"); //源图片1
QImage ov1(":/pic/2.png"); //源图片2
QImage ov2(":/pic/3.png"); //源图片3
QImage out1 = createImageWithOverlay(base1, ov1, ov2);
out1.save("d:/1.png"); //输出图片