⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagecomposer.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2006-2006 Trolltech ASA. All rights reserved.**** This file is part of the example classes of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include <QtGui>#include "imagecomposer.h"static const QSize resultSize(200, 200);ImageComposer::ImageComposer(){    sourceButton = new QToolButton;    sourceButton->setIconSize(resultSize);    operatorComboBox = new QComboBox;    addOp(QPainter::CompositionMode_SourceOver, tr("SourceOver"));    addOp(QPainter::CompositionMode_DestinationOver, tr("DestinationOver"));    addOp(QPainter::CompositionMode_Clear, tr("Clear"));    addOp(QPainter::CompositionMode_Source, tr("Source"));    addOp(QPainter::CompositionMode_Destination, tr("Destination"));    addOp(QPainter::CompositionMode_SourceIn, tr("SourceIn"));    addOp(QPainter::CompositionMode_DestinationIn, tr("DestinationIn"));    addOp(QPainter::CompositionMode_SourceOut, tr("SourceOut"));    addOp(QPainter::CompositionMode_DestinationOut, tr("DestinationOut"));    addOp(QPainter::CompositionMode_SourceAtop, tr("SourceAtop"));    addOp(QPainter::CompositionMode_DestinationAtop, tr("DestinationAtop"));    addOp(QPainter::CompositionMode_Xor, tr("Xor"));    destinationButton = new QToolButton;    destinationButton->setIconSize(resultSize);    equalLabel = new QLabel(tr("="));    resultLabel = new QLabel;    resultLabel->setMinimumWidth(resultSize.width());    connect(sourceButton, SIGNAL(clicked()), this, SLOT(chooseSource()));    connect(operatorComboBox, SIGNAL(activated(int)),            this, SLOT(recalculateResult()));    connect(destinationButton, SIGNAL(clicked()),            this, SLOT(chooseDestination()));    QGridLayout *mainLayout = new QGridLayout;    mainLayout->addWidget(sourceButton, 0, 0, 3, 1);    mainLayout->addWidget(operatorComboBox, 1, 1);    mainLayout->addWidget(destinationButton, 0, 2, 3, 1);    mainLayout->addWidget(equalLabel, 1, 3);    mainLayout->addWidget(resultLabel, 0, 4, 3, 1);    mainLayout->setSizeConstraint(QLayout::SetFixedSize);    setLayout(mainLayout);    resultImage = QImage(resultSize, QImage::Format_ARGB32_Premultiplied);    loadImage(":/images/butterfly.png", &sourceImage, sourceButton);    loadImage(":/images/checker.png", &destinationImage, destinationButton);    setWindowTitle(tr("Image Composition"));}void ImageComposer::chooseSource(){    chooseImage(tr("Choose Source Image"), &sourceImage, sourceButton);}void ImageComposer::chooseDestination(){    chooseImage(tr("Choose Destination Image"), &destinationImage,                destinationButton);}void ImageComposer::recalculateResult(){    QPainter::CompositionMode mode = currentMode();    QPainter painter(&resultImage);    painter.setCompositionMode(QPainter::CompositionMode_Source);    painter.fillRect(resultImage.rect(), Qt::transparent);    painter.setCompositionMode(QPainter::CompositionMode_SourceOver);    painter.drawImage(0, 0, destinationImage);    painter.setCompositionMode(mode);    painter.drawImage(0, 0, sourceImage);    painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);    painter.fillRect(resultImage.rect(), Qt::white);    painter.end();    resultLabel->setPixmap(QPixmap::fromImage(resultImage));}void ImageComposer::addOp(QPainter::CompositionMode mode, const QString &name){    operatorComboBox->addItem(name, mode);}void ImageComposer::chooseImage(const QString &title, QImage *image,                                QToolButton *button){    QString fileName = QFileDialog::getOpenFileName(this, title);    if (!fileName.isEmpty())        loadImage(fileName, image, button);}void ImageComposer::loadImage(const QString &fileName, QImage *image,                              QToolButton *button){    image->load(fileName);    QImage fixedImage(resultSize, QImage::Format_ARGB32_Premultiplied);    QPainter painter(&fixedImage);    painter.setCompositionMode(QPainter::CompositionMode_Source);    painter.fillRect(fixedImage.rect(), Qt::transparent);    painter.setCompositionMode(QPainter::CompositionMode_SourceOver);    painter.drawImage(imagePos(*image), *image);    painter.end();    button->setIcon(QPixmap::fromImage(fixedImage));    *image = fixedImage;    recalculateResult();}QPainter::CompositionMode ImageComposer::currentMode() const{    return (QPainter::CompositionMode)           operatorComboBox->itemData(operatorComboBox->currentIndex()).toInt();}QPoint ImageComposer::imagePos(const QImage &image) const{    return QPoint((resultSize.width() - image.width()) / 2,                  (resultSize.height() - image.height()) / 2);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -