[TASK] Add button to convert to monochrome.

This commit is contained in:
Jan Philipp Timme 2015-11-10 12:41:01 +01:00
parent 2467bade73
commit c2421582b5
2 changed files with 64 additions and 25 deletions

View File

@ -73,6 +73,31 @@ void ImageViewer::initializeImage() {
analyzeImage(); analyzeImage();
} }
/**
* In case it is needed, convert the loaded image into grayscale.
* @brief ImageViewer::convertToMonochrome
*/
void ImageViewer::convertToMonochrome() {
if(image!=NULL) {
logFile << "Converting image to monochrome...";
renewLogging();
for(int x=0; x<image->width(); x++) {
for(int y=0; y<image->height(); y++) {
int r,g,b;
QColor color = QColor::fromRgb(image->pixel(x, y));
color.getRgb(&r,&g,&b);
int intensity = (int)(0.299*r+0.587*g+0.114*b);
color = QColor::fromRgb(intensity, intensity, intensity);
image->setPixel(x, y, color.rgba());
original_image->setPixel(x, y, color.rgba());
}
}
updateImageDisplay();
logFile << "done." << std::endl;
renewLogging();
}
}
/** /**
* Draws a simple, black line. * Draws a simple, black line.
@ -195,7 +220,7 @@ void ImageViewer::analyzeImage() {
renewLogging(); renewLogging();
QString result = QString("Intensity: Average: %1, Variance: %2").arg(getAverageIntensity()).arg(getIntensityVariance()); QString result = QString("Intensity: Average: %1, Variance: %2").arg(getAverageIntensity()).arg(getIntensityVariance());
task_tab2_stats->setText(result); stats->setText(result);
updateHistogramm(); updateHistogramm();
} }
@ -324,21 +349,25 @@ void ImageViewer::generateControlPanels() {
task_tab1 = new QVBoxLayout(); task_tab1 = new QVBoxLayout();
task_tab_widget1->setLayout(task_tab1); task_tab_widget1->setLayout(task_tab1);
task_tab1_button1 = new QPushButton(); monochrome = new QPushButton();
task_tab1_button1->setText("Draw a black line"); monochrome->setText("Convert to monochrome");
QObject::connect(task_tab1_button1, SIGNAL(clicked()), this, SLOT (drawBlackLine())); QObject::connect(monochrome, SIGNAL(clicked()), this, SLOT (convertToMonochrome()));
task_tab1_button2 = new QPushButton(); draw_black_line = new QPushButton();
task_tab1_button2->setText("Draw a rainbow cross"); draw_black_line->setText("Draw a black line");
QObject::connect(task_tab1_button2, SIGNAL(clicked()), this, SLOT (drawRainbowCross())); QObject::connect(draw_black_line, SIGNAL(clicked()), this, SLOT (drawBlackLine()));
task_tab1_button3 = new QPushButton(); draw_rainbow_cross = new QPushButton();
task_tab1_button3->setText("Start the neverending acid trip!"); draw_rainbow_cross->setText("Draw a rainbow cross");
QObject::connect(task_tab1_button3, SIGNAL(clicked()), this, SLOT (acidTrippin())); QObject::connect(draw_rainbow_cross, SIGNAL(clicked()), this, SLOT (drawRainbowCross()));
task_tab1_button4 = new QPushButton(); acid_trip = new QPushButton();
task_tab1_button4->setText("Draw a diagonal cross"); acid_trip->setText("Start the neverending acid trip!");
QObject::connect(task_tab1_button4, SIGNAL(clicked()), this, SLOT (drawDiagonalCross())); QObject::connect(acid_trip, SIGNAL(clicked()), this, SLOT (acidTrippin()));
diagonal_cross = new QPushButton();
diagonal_cross->setText("Draw a diagonal cross");
QObject::connect(diagonal_cross, SIGNAL(clicked()), this, SLOT (drawDiagonalCross()));
line_slider = new QSlider(Qt::Horizontal); line_slider = new QSlider(Qt::Horizontal);
line_slider->setMinimum(1); line_slider->setMinimum(1);
@ -346,11 +375,12 @@ void ImageViewer::generateControlPanels() {
line_slider->setValue(3); line_slider->setValue(3);
//QObject::connect(lineSlider, SIGNAL(valueChanged(int)), this, SLOT (drawRainbowCross())); //QObject::connect(lineSlider, SIGNAL(valueChanged(int)), this, SLOT (drawRainbowCross()));
task_tab1->addWidget(monochrome);
task_tab1->addWidget(new QLabel("Let's draw something!")); task_tab1->addWidget(new QLabel("Let's draw something!"));
task_tab1->addWidget(task_tab1_button1); task_tab1->addWidget(draw_black_line);
task_tab1->addWidget(task_tab1_button2); task_tab1->addWidget(draw_rainbow_cross);
task_tab1->addWidget(task_tab1_button3); task_tab1->addWidget(acid_trip);
task_tab1->addWidget(task_tab1_button4); task_tab1->addWidget(diagonal_cross);
task_tab1->addWidget(new QLabel("This will not stop unless process is killed.")); task_tab1->addWidget(new QLabel("This will not stop unless process is killed."));
task_tab1->addWidget(line_slider); task_tab1->addWidget(line_slider);
task_tab1->addWidget(new QLabel("Sets the width of the cross.")); task_tab1->addWidget(new QLabel("Sets the width of the cross."));
@ -368,8 +398,12 @@ void ImageViewer::generateControlPanels() {
histogramm_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); histogramm_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
histogramm_label->setScaledContents(false); histogramm_label->setScaledContents(false);
task_tab2_stats = new QLabel(); stats = new QLabel();
task_tab2_stats->setText("Intensity will be shown here."); stats->setText("Intensity will be shown here.");
analyze_image = new QPushButton();
analyze_image->setText("Analyze image");
QObject::connect(analyze_image, SIGNAL(clicked()), this, SLOT(analyzeImage()));
brightness_slider = new QSlider(Qt::Horizontal); brightness_slider = new QSlider(Qt::Horizontal);
brightness_slider->setMinimum(0); brightness_slider->setMinimum(0);
@ -383,9 +417,10 @@ void ImageViewer::generateControlPanels() {
contrast_slider->setValue(255); contrast_slider->setValue(255);
QObject::connect(contrast_slider, SIGNAL(valueChanged(int)), this, SLOT (adjustContrast(int))); QObject::connect(contrast_slider, SIGNAL(valueChanged(int)), this, SLOT (adjustContrast(int)));
task_tab2->addWidget(task_tab2_stats); task_tab2->addWidget(stats);
task_tab2->addWidget(new QLabel("Histogramm")); task_tab2->addWidget(new QLabel("Histogramm"));
task_tab2->addWidget(histogramm_label); task_tab2->addWidget(histogramm_label);
task_tab2->addWidget(analyze_image);
task_tab2->addWidget(new QLabel("Brightness")); task_tab2->addWidget(new QLabel("Brightness"));
task_tab2->addWidget(brightness_slider); task_tab2->addWidget(brightness_slider);
task_tab2->addWidget(new QLabel("Contrast")); task_tab2->addWidget(new QLabel("Contrast"));

View File

@ -72,10 +72,12 @@ class ImageViewer : public QMainWindow {
QWidget* task_tab_widget1; QWidget* task_tab_widget1;
QVBoxLayout* task_tab1; QVBoxLayout* task_tab1;
QPushButton* task_tab1_button1; QPushButton* draw_black_line;
QPushButton* task_tab1_button2; QPushButton* draw_rainbow_cross;
QPushButton* task_tab1_button3; QPushButton* acid_trip;
QPushButton* task_tab1_button4; QPushButton* diagonal_cross;
QPushButton* monochrome;
QSlider* line_slider; QSlider* line_slider;
@ -83,8 +85,9 @@ class ImageViewer : public QMainWindow {
QWidget* task_tab_widget2; QWidget* task_tab_widget2;
QVBoxLayout* task_tab2; QVBoxLayout* task_tab2;
QLabel* task_tab2_stats; QLabel* stats;
QLabel* histogramm_label; QLabel* histogramm_label;
QPushButton* analyze_image;
QSlider* brightness_slider; QSlider* brightness_slider;
QSlider* contrast_slider; QSlider* contrast_slider;
@ -109,6 +112,7 @@ class ImageViewer : public QMainWindow {
void updateHistogramm(); void updateHistogramm();
void adjustBrightness(int b); void adjustBrightness(int b);
void adjustContrast(int c); void adjustContrast(int c);
void convertToMonochrome();
void open(); void open();
void print(); void print();