You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.1 KiB
88 lines
3.1 KiB
9 years ago
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/**
|
||
|
* \file layercomposer.cpp
|
||
|
* \version v1.0
|
||
|
* \author Ing. Dominik Malcik
|
||
|
*/
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "layercomposer.h"
|
||
|
#include <QtGui>
|
||
|
|
||
|
LayerComposer::LayerComposer(QWidget *parent) : QMainWindow(parent) {
|
||
|
}
|
||
|
|
||
|
QImage LayerComposer::composeLayers (std::vector<QString> importedLayers,
|
||
|
std::vector<QString> analysingLayers,
|
||
|
std::vector<int> importedIndexes,
|
||
|
std::vector<int> analysingIndexes,
|
||
|
QString &bgRootDir,
|
||
|
QString &overLayRootDir) {
|
||
|
|
||
|
|
||
|
QString bgImgFileName;
|
||
|
for (unsigned int i = 0; i < importedIndexes.size(); i++) {
|
||
|
bgImgFileName = importedLayers[importedIndexes[i]];
|
||
|
}
|
||
|
bgImgFileName = bgRootDir + bgImgFileName;
|
||
|
|
||
|
// final image
|
||
|
// size is taken from the background bitmap
|
||
|
QImage bgImage(bgImgFileName);
|
||
|
QImage resultImage = QImage(bgImage.width(), bgImage.height(), QImage::Format_ARGB32_Premultiplied);
|
||
|
QPainter painter(&resultImage);
|
||
|
|
||
|
// draw background
|
||
|
painter.setCompositionMode(QPainter::CompositionMode_Source);
|
||
|
painter.fillRect(resultImage.rect(), Qt::transparent);
|
||
|
|
||
|
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||
|
painter.drawImage(0, 0, bgImage);
|
||
|
// ----------------------
|
||
|
|
||
|
QString overlayFileName;
|
||
|
QString srcAddr = overLayRootDir;
|
||
|
for (unsigned int i = 0; i < analysingIndexes.size(); i++) {
|
||
|
overlayFileName = srcAddr + analysingLayers[analysingIndexes[i]];
|
||
|
|
||
|
// mask black colour
|
||
|
QPixmap mypixmap(overlayFileName);
|
||
|
mypixmap.setMask(mypixmap.createMaskFromColor(Qt::black));
|
||
|
|
||
|
// draw given image
|
||
|
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||
|
painter.drawPixmap(0, 0, mypixmap);
|
||
|
}
|
||
|
|
||
|
painter.end();
|
||
|
return resultImage;
|
||
|
}
|
||
|
|
||
|
|
||
|
QImage LayerComposer::maskSelectedLayer(QString &bgImageFileName, QString &bgRootDir, QRgb maskColor, int rThrsh, int gThrsh, int bThrsh ) {
|
||
|
|
||
|
QImage image(bgRootDir + bgImageFileName);
|
||
|
OpenCVprocessor * cvProcessor = new OpenCVprocessor();
|
||
|
|
||
|
image = cvProcessor->normalizeImage(&image, qRed(maskColor), qGreen(maskColor), qBlue(maskColor), rThrsh, gThrsh, bThrsh);
|
||
|
QPixmap maskPixmap = QPixmap::fromImage(image);
|
||
|
|
||
|
QPixmap myPixmap(bgRootDir + bgImageFileName);
|
||
|
QImage resultImage = QImage(myPixmap.width(), myPixmap.height(), QImage::Format_ARGB32_Premultiplied);
|
||
|
QPainter painter(&resultImage);
|
||
|
|
||
|
// draw background - black
|
||
|
painter.setCompositionMode(QPainter::CompositionMode_Source);
|
||
|
painter.fillRect(resultImage.rect(), Qt::black);
|
||
|
|
||
|
// draw background masked from OpenCV
|
||
|
myPixmap.setMask(maskPixmap.createMaskFromColor(Qt::black));
|
||
|
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||
|
painter.drawPixmap(0, 0, myPixmap);
|
||
|
|
||
|
painter.end();
|
||
|
|
||
|
return resultImage;
|
||
|
}
|
||
|
|