📄 transactionthread.cpp
字号:
#include <QtGui>#include "transactionthread.h"using namespace std;FlipTransaction::FlipTransaction(Qt::Orientation orientation){ this->orientation = orientation;}QImage FlipTransaction::apply(const QImage &image){ return image.mirrored(orientation == Qt::Horizontal, orientation == Qt::Vertical);}QString FlipTransaction::message(){ if (orientation == Qt::Horizontal) { return QObject::tr("Flipping image horizontally..."); } else { return QObject::tr("Flipping image vertically..."); }}ResizeTransaction::ResizeTransaction(const QSize &size){ this->size = size;}QString ResizeTransaction::message(){ return QObject::tr("Resizing image...");}QImage ResizeTransaction::apply(const QImage &image){ return image.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);}ConvertDepthTransaction::ConvertDepthTransaction(int depth){ this->depth = depth;}QImage ConvertDepthTransaction::apply(const QImage &image){ QImage::Format format; switch (depth) { case 1: format = QImage::Format_Mono; break; case 8: format = QImage::Format_Indexed8; break; case 24: default: format = QImage::Format_RGB32; } return image.convertToFormat(format);}QString ConvertDepthTransaction::message(){ return QObject::tr("Converting image depth...");}void TransactionThread::addTransaction(Transaction *transact){ QMutexLocker locker(&mutex); transactions.enqueue(transact); if (!isRunning()) start();}void TransactionThread::run(){ Transaction *transact; forever { mutex.lock(); if (transactions.isEmpty()) { mutex.unlock(); break; } QImage oldImage = currentImage; transact = transactions.dequeue(); mutex.unlock(); emit transactionStarted(transact->message()); QImage newImage = transact->apply(oldImage); delete transact; mutex.lock(); currentImage = newImage; mutex.unlock(); }}void TransactionThread::setImage(const QImage &image){ QMutexLocker locker(&mutex); currentImage = image;}QImage TransactionThread::image(){ QMutexLocker locker(&mutex); return currentImage;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -