| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #ifndef IMAGECROPPER_H
- #define IMAGECROPPER_H
- #include <QWidget>
- #include <QDialog>
- #include <QPainter>
- #include <QLabel>
- #include <QPixmap>
- #include <QString>
- #include <QMessageBox>
- #include <QHBoxLayout>
- #include <QVBoxLayout>
- #include <QPushButton>
- #include "imagecropperlabel.h"
- /*******************************************************
- * Loacl private class, which do image-cropping
- * Used in class ImageCropper
- *******************************************************/
- class ImageCropperDialogPrivate : public QDialog {
- Q_OBJECT
- public:
- ImageCropperDialogPrivate(const QPixmap& imageIn, QPixmap& outputImage,
- int windowWidth, int windowHeight,
- CropperShape shape, QSize cropperSize = QSize()) :
- QDialog(nullptr), outputImage(outputImage)
- {
- this->setAttribute(Qt::WA_DeleteOnClose, true);
- this->setWindowTitle("Image Cropper");
- this->setMouseTracking(true);
- this->setModal(true);
- imageLabel = new ImageCropperLabel(windowWidth, windowHeight, this);
- imageLabel->setCropper(shape, cropperSize);
- imageLabel->setOutputShape(OutputShape::RECT);
- imageLabel->setOriginalImage(imageIn);
- imageLabel->enableOpacity(true);
- QHBoxLayout* btnLayout = new QHBoxLayout();
- btnOk = new QPushButton("OK", this);
- btnCancel = new QPushButton("Cancel", this);
- btnLayout->addStretch();
- btnLayout->addWidget(btnOk);
- btnLayout->addWidget(btnCancel);
- QVBoxLayout* mainLayout = new QVBoxLayout(this);
- mainLayout->addWidget(imageLabel);
- mainLayout->addLayout(btnLayout);
- connect(btnOk, &QPushButton::clicked, this, [this](){
- this->outputImage = this->imageLabel->getCroppedImage();
- this->close();
- });
- connect(btnCancel, &QPushButton::clicked, this, [this](){
- this->outputImage = QPixmap();
- this->close();
- });
- }
- private:
- ImageCropperLabel* imageLabel;
- QPushButton* btnOk;
- QPushButton* btnCancel;
- QPixmap& outputImage;
- };
- /*******************************************************************
- * class ImageCropperDialog
- * create a instane of class ImageCropperDialogPrivate
- * and get cropped image from the instance(after closing)
- ********************************************************************/
- class ImageCropperDialog : QObject {
- public:
- static QPixmap getCroppedImage(const QString& filename,int windowWidth, int windowHeight,
- CropperShape cropperShape, QSize crooperSize = QSize())
- {
- QPixmap inputImage;
- QPixmap outputImage;
- if (!inputImage.load(filename)) {
- QMessageBox::critical(nullptr, "Error", "Load image failed!", QMessageBox::Ok);
- return outputImage;
- }
- ImageCropperDialogPrivate* imageCropperDo =
- new ImageCropperDialogPrivate(inputImage, outputImage,
- windowWidth, windowHeight,
- cropperShape, crooperSize);
- imageCropperDo->exec();
- return outputImage;
- }
- };
- #endif // IMAGECROPPER_H
|