-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfilterlinear.cpp
More file actions
53 lines (44 loc) · 1.85 KB
/
filterlinear.cpp
File metadata and controls
53 lines (44 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "filterlinear.h"
#include "imageviewer.h"
#include "filter.h"
#include "controller.h"
#include <vector>
#include <QIntValidator>
#include <QComboBox>
#include <QHeaderView>
FilterLinear::FilterLinear() : FunctionBox("Bild Filtern"){
for(int i = 3; i < 10 ; i+=2) sizeBox->addItem(QString::number(i));
initTable();
QObject::connect(sizeButton.get(), QPushButton::clicked, this, FilterLinear::initTable );
layout->addRow("Größe: ",sizeBox.get());
layout->addRow(sizeButton.get());
for(auto& entry : edgeFunctionMap) cornerMethodField->addItem(entry.first);
layout->addRow("Randbehandlung: ",cornerMethodField.get());
layout->addRow(filtertable.get());
layout->addRow(filterButton.get());
QObject::connect(filterButton.get(), QPushButton::clicked, this, FilterLinear::filterLinearly );
}
void FilterLinear::initTable(){
int size = sizeBox->currentText().toInt();
if(size != filtertable->columnCount()){
filtertable->setRowCount(size);
filtertable->setColumnCount(size);
//calculating ideal size
int w = filtertable->verticalHeader()->width() + 4; // +4 seems to be needed
for (int i = 0; i < size; i++)
w += filtertable->columnWidth(i); // seems to include gridline (on my machine)
int h = filtertable->horizontalHeader()->height() + 4;
for (int i = 0; i < size; i++)
h += filtertable->rowHeight(i);
QSize newSize(w, h);
filtertable->setMaximumSize(newSize);
filtertable->setMinimumSize(filtertable->maximumSize());
//filtertable->setValidator(new QIntValidator(-99,99));
}
}
void FilterLinear::filterLinearly(){
EdgeAlgorithm edge = edgeFunctionMap[cornerMethodField->currentText()];
std::vector<std::vector<int>> input;
Filter filter(input);
Controller::instance()->filterLinear(filter,edge);
}