111 lines
2.7 KiB
C++
111 lines
2.7 KiB
C++
|
#include "xypackimage.h"
|
|||
|
#include "xygifcreator.h"
|
|||
|
#include "ui_xypackimage.h"
|
|||
|
#include <QFileDialog>
|
|||
|
#include <QDateTime>
|
|||
|
#include <QThread>
|
|||
|
#include <QProgressBar>
|
|||
|
#include <QMessageBox>
|
|||
|
#include <QDebug>
|
|||
|
|
|||
|
XYPackImage::XYPackImage(QWidget *parent) :
|
|||
|
QDialog(parent),
|
|||
|
ui(new Ui::XYPackImage)
|
|||
|
{
|
|||
|
setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
|
|||
|
ui->setupUi(this);
|
|||
|
|
|||
|
mWorkThread = new Work;
|
|||
|
connect(this, &XYPackImage::pickImags, mWorkThread, &Work::pickImags);
|
|||
|
|
|||
|
connect(mWorkThread, &Work::progress, ui->progressBar, &QProgressBar::setValue);
|
|||
|
}
|
|||
|
|
|||
|
XYPackImage::~XYPackImage()
|
|||
|
{
|
|||
|
delete mWorkThread;
|
|||
|
delete ui;
|
|||
|
}
|
|||
|
|
|||
|
void XYPackImage::on_pushButton_2_clicked() // 添加图片
|
|||
|
{
|
|||
|
QStringList files = QFileDialog::getOpenFileNames(this, "", "", "Images (*.png *.jpg)");
|
|||
|
|
|||
|
for (int i = 0; i < files.size(); ++i)
|
|||
|
{
|
|||
|
QListWidgetItem *item = new QListWidgetItem;
|
|||
|
item->setIcon(QIcon(files.at(i)));
|
|||
|
item->setText(files.at(i));
|
|||
|
ui->listWidget->addItem(item);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void XYPackImage::on_pushButton_clicked() // 开始打包
|
|||
|
{
|
|||
|
QStringList images;
|
|||
|
for (int row = 0; row < ui->listWidget->count(); ++row)
|
|||
|
{
|
|||
|
images << ui->listWidget->item(row)->text();
|
|||
|
}
|
|||
|
|
|||
|
if (images.isEmpty())
|
|||
|
{
|
|||
|
QMessageBox::warning(this, QStringLiteral("提醒"), QStringLiteral("请先选择图片!"));
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (!mGifFile.isEmpty())
|
|||
|
{
|
|||
|
int w = ui->width->value();
|
|||
|
int h = ui->height->value();
|
|||
|
int delay = ui->delay->value();
|
|||
|
|
|||
|
emit pickImags(mGifFile, images, w, h, delay);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
QMessageBox::warning(this, QStringLiteral("提醒"), QStringLiteral("请先设置保存gif的位置!"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Work::Work()
|
|||
|
{
|
|||
|
mThread = new QThread;
|
|||
|
mThread->start();
|
|||
|
moveToThread(mThread);
|
|||
|
}
|
|||
|
|
|||
|
Work::~Work()
|
|||
|
{
|
|||
|
if (mThread->isRunning()) {
|
|||
|
mThread->quit();
|
|||
|
mThread->wait();
|
|||
|
}
|
|||
|
|
|||
|
delete mThread;
|
|||
|
}
|
|||
|
|
|||
|
void Work::pickImags(const QString &file, const QStringList &imgs, int w, int h, int delay)
|
|||
|
{
|
|||
|
XYGifCreator gif;
|
|||
|
gif.begin(file.toUtf8().data(), w, h, 1, Qt::DirectConnection);
|
|||
|
emit progress(0);
|
|||
|
for (int i = 0; i < imgs.size(); ++i)
|
|||
|
{
|
|||
|
QImage img(imgs.at(i));
|
|||
|
img = img.scaled(w, h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
|||
|
gif.frame(img, delay, Qt::DirectConnection);
|
|||
|
|
|||
|
progress(static_cast<int>((i + 1.0) / imgs.size() * 100));
|
|||
|
}
|
|||
|
gif.end(Qt::DirectConnection);
|
|||
|
|
|||
|
emit progress(100);
|
|||
|
}
|
|||
|
|
|||
|
void XYPackImage::on_pushButton_3_clicked()
|
|||
|
{
|
|||
|
mGifFile = QFileDialog::getSaveFileName(this, "",
|
|||
|
QString("xy-%1.gif").arg(QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss")));
|
|||
|
}
|