Browse Source

initial commit

Jose Ortiz 9 years ago
commit
6e19508df4
100 changed files with 9257 additions and 0 deletions
  1. 42
    0
      ClickableLabel.cpp
  2. 54
    0
      ClickableLabel.h
  3. 20
    0
      Filter.cpp
  4. 29
    0
      GreenScreenLab.pro
  5. 181
    0
      MergePanel.cpp
  6. 122
    0
      MergePanel.h
  7. 434
    0
      MergePanel.ui
  8. 632
    0
      README.md
  9. 1574
    0
      arrays-GreenScreen.html
  10. 636
    0
      arrays-GreenScreen.md
  11. 129
    0
      doc/en/html/_clickable_label_8h_source.html
  12. 96
    0
      doc/en/html/_filter_8cpp.html
  13. 160
    0
      doc/en/html/_merge_panel_8h_source.html
  14. 104
    0
      doc/en/html/annotated.html
  15. BIN
      doc/en/html/arrowdown.png
  16. BIN
      doc/en/html/arrowright.png
  17. BIN
      doc/en/html/bc_s.png
  18. BIN
      doc/en/html/bdwn.png
  19. 110
    0
      doc/en/html/class_clickable_label-members.html
  20. 161
    0
      doc/en/html/class_clickable_label.html
  21. BIN
      doc/en/html/class_clickable_label.png
  22. 116
    0
      doc/en/html/class_main_window-members.html
  23. 207
    0
      doc/en/html/class_main_window.html
  24. BIN
      doc/en/html/class_main_window.png
  25. 108
    0
      doc/en/html/classes.html
  26. BIN
      doc/en/html/closed.png
  27. BIN
      doc/en/html/doc.png
  28. 1449
    0
      doc/en/html/doxygen.css
  29. BIN
      doc/en/html/doxygen.png
  30. 97
    0
      doc/en/html/dynsections.js
  31. 102
    0
      doc/en/html/files.html
  32. BIN
      doc/en/html/folderclosed.png
  33. BIN
      doc/en/html/folderopen.png
  34. 144
    0
      doc/en/html/functions.html
  35. 144
    0
      doc/en/html/functions_func.html
  36. 106
    0
      doc/en/html/hierarchy.html
  37. 90
    0
      doc/en/html/index.html
  38. 68
    0
      doc/en/html/jquery.js
  39. 98
    0
      doc/en/html/namespace_ui.html
  40. 100
    0
      doc/en/html/namespaces.html
  41. BIN
      doc/en/html/nav_f.png
  42. BIN
      doc/en/html/nav_g.png
  43. BIN
      doc/en/html/nav_h.png
  44. BIN
      doc/en/html/open.png
  45. 26
    0
      doc/en/html/search/all_0.html
  46. 4
    0
      doc/en/html/search/all_0.js
  47. 26
    0
      doc/en/html/search/all_1.html
  48. 4
    0
      doc/en/html/search/all_1.js
  49. 26
    0
      doc/en/html/search/all_2.html
  50. 4
    0
      doc/en/html/search/all_2.js
  51. 26
    0
      doc/en/html/search/all_3.html
  52. 8
    0
      doc/en/html/search/all_3.js
  53. 26
    0
      doc/en/html/search/all_4.html
  54. 9
    0
      doc/en/html/search/all_4.js
  55. 26
    0
      doc/en/html/search/all_5.html
  56. 4
    0
      doc/en/html/search/all_5.js
  57. 26
    0
      doc/en/html/search/all_6.html
  58. 4
    0
      doc/en/html/search/all_6.js
  59. 26
    0
      doc/en/html/search/classes_0.html
  60. 4
    0
      doc/en/html/search/classes_0.js
  61. 26
    0
      doc/en/html/search/classes_1.html
  62. 4
    0
      doc/en/html/search/classes_1.js
  63. BIN
      doc/en/html/search/close.png
  64. 26
    0
      doc/en/html/search/files_0.html
  65. 4
    0
      doc/en/html/search/files_0.js
  66. 26
    0
      doc/en/html/search/functions_0.html
  67. 4
    0
      doc/en/html/search/functions_0.js
  68. 26
    0
      doc/en/html/search/functions_1.html
  69. 4
    0
      doc/en/html/search/functions_1.js
  70. 26
    0
      doc/en/html/search/functions_2.html
  71. 8
    0
      doc/en/html/search/functions_2.js
  72. 26
    0
      doc/en/html/search/functions_3.html
  73. 9
    0
      doc/en/html/search/functions_3.js
  74. 26
    0
      doc/en/html/search/functions_4.html
  75. 4
    0
      doc/en/html/search/functions_4.js
  76. BIN
      doc/en/html/search/mag_sel.png
  77. 26
    0
      doc/en/html/search/namespaces_0.html
  78. 4
    0
      doc/en/html/search/namespaces_0.js
  79. 12
    0
      doc/en/html/search/nomatches.html
  80. 271
    0
      doc/en/html/search/search.css
  81. 791
    0
      doc/en/html/search/search.js
  82. BIN
      doc/en/html/search/search_l.png
  83. BIN
      doc/en/html/search/search_m.png
  84. BIN
      doc/en/html/search/search_r.png
  85. 27
    0
      doc/en/html/search/searchdata.js
  86. BIN
      doc/en/html/splitbar.png
  87. BIN
      doc/en/html/sync_off.png
  88. BIN
      doc/en/html/sync_on.png
  89. BIN
      doc/en/html/tab_a.png
  90. BIN
      doc/en/html/tab_b.png
  91. BIN
      doc/en/html/tab_h.png
  92. BIN
      doc/en/html/tab_s.png
  93. 60
    0
      doc/en/html/tabs.css
  94. 21
    0
      doc/en/latex/Makefile
  95. 3
    0
      doc/en/latex/_filter_8cpp.tex
  96. 5
    0
      doc/en/latex/annotated.tex
  97. 197
    0
      doc/en/latex/class_clickable_label.eps
  98. BIN
      doc/en/latex/class_clickable_label.pdf
  99. 59
    0
      doc/en/latex/class_clickable_label.tex
  100. 0
    0
      doc/en/latex/class_main_window.eps

+ 42
- 0
ClickableLabel.cpp View File

@@ -0,0 +1,42 @@
1
+#include "ClickableLabel.h"
2
+
3
+/// \fn ClickableLabel::ClickableLabel(QWidget *parent)
4
+/// \~English
5
+/// \brief Constructor
6
+/// \~Spanish
7
+/// \brief Constructor
8
+ClickableLabel::ClickableLabel(QWidget *parent) : QLabel(parent) {
9
+    this->x = 0;
10
+    this->y = 0;
11
+}
12
+
13
+/// \fn void ClickableLabel::mouseMoveEvent(QMouseEvent *ev)
14
+/// \~English
15
+/// \brief Funtion to add mouse event to the labelWidget
16
+/// \~Spanish
17
+/// \brief Funcion para anadir evento del raton (mouse) al labelWidget
18
+void ClickableLabel::mouseMoveEvent(QMouseEvent *ev){
19
+    emit Mouse_Pos();
20
+    this->x = ev->x();
21
+    this->y = ev->y();
22
+}
23
+
24
+/// \fn void ClickableLabel::mousePressEvent(QMouseEvent *ev)
25
+/// \~English
26
+/// \brief Funtion to add mouse event to the labelWidget
27
+/// \~Spanish
28
+/// \brief Funcion para anadir evento del raton (mouse) al labelWidget
29
+void ClickableLabel::mousePressEvent(QMouseEvent *ev){
30
+    x = ev->x();
31
+    y = ev->y();
32
+    emit Mouse_Pressed();
33
+}
34
+
35
+/// \fn void ClickableLabel::leaveEvent(QEvent *)
36
+/// \~English
37
+/// \brief Funtion to add mouse event to the labelWidget
38
+/// \~Spanish
39
+/// \brief Funcion para anadir evento del raton (mouse) al labelWidget
40
+void ClickableLabel::leaveEvent(QEvent *){
41
+    emit Mouse_Left();
42
+}

+ 54
- 0
ClickableLabel.h View File

@@ -0,0 +1,54 @@
1
+#ifndef CLICKABLELABEL_H
2
+#define CLICKABLELABEL_H
3
+
4
+#include <QLabel>
5
+#include <QMouseEvent>
6
+#include <QDebug>
7
+
8
+/// A class that permits a label to be clicked.
9
+///
10
+/// With this class we can determine de mouse position when is pressed
11
+/// and when the mouse left the label.
12
+///
13
+class ClickableLabel : public QLabel{
14
+    Q_OBJECT
15
+public:
16
+
17
+    /// \fn ClickableLabel::ClickableLabel(QWidget *parent)
18
+    /// \~English
19
+    /// \brief Constructor
20
+    /// \~Spanish
21
+    /// \brief Constructor
22
+    explicit ClickableLabel(QWidget *parent = 0);
23
+
24
+    /// \fn void ClickableLabel::mouseMoveEvent(QMouseEvent *ev)
25
+    /// \~English
26
+    /// \brief Funtion to add mouse event to the labelWidget
27
+    /// \~Spanish
28
+    /// \brief Funcion para anadir evento del raton (mouse) al labelWidget
29
+    void mouseMoveEvent(QMouseEvent *ev);
30
+
31
+    /// \fn void ClickableLabel::mousePressEvent(QMouseEvent *ev)
32
+    /// \~English
33
+    /// \brief Funtion to add mouse event to the labelWidget
34
+    /// \~Spanish
35
+    /// \brief Funcion para anadir evento del raton (mouse) al labelWidget
36
+    void mousePressEvent(QMouseEvent *ev);
37
+
38
+    /// \fn void ClickableLabel::leaveEvent(QEvent *)
39
+    /// \~English
40
+    /// \brief Funtion to add mouse event to the labelWidget
41
+    /// \~Spanish
42
+    /// \brief Funcion para anadir evento del raton (mouse) al labelWidget
43
+    void leaveEvent(QEvent *);
44
+    int x,y;
45
+
46
+signals:
47
+    void Mouse_Pressed();
48
+    void Mouse_Pos();
49
+
50
+
51
+    void Mouse_Left();
52
+};
53
+
54
+#endif // CLICKABLELABEL_H

+ 20
- 0
Filter.cpp View File

@@ -0,0 +1,20 @@
1
+// RAAN - 2014-07-19 : Ghost function and minor changes to parameters
2
+/// \file
3
+///
4
+#include "MergePanel.h"
5
+
6
+/// \fn void MainWindow::MergeImages(const QImage &objectImage, const QImage &backgroundImage, QImage & mergedImage, int threshold, bool ghost, int x, int y, int offset_x, int offset_y)
7
+/// \~English
8
+/// \brief Funcion that merges two images together. It takes an image with any background color
9
+/// and puts it in another image that will act as a background. (Implements Greenscreen techonology)
10
+/// \~Spanish
11
+/// \brief Funcion que fusiona dos imagenes juntas.  Toma una image con cualquier color de trasfondo
12
+/// y lo pone en otra imagen que actual como el  trasfondo. (Implementa la tecnologia de trasfondo verde)
13
+void MainWindow::MergeImages(const QImage &objectImage, const QImage &backgroundImage, QImage & mergedImage, int threshold, bool ghost, int x, int y,
14
+                 int offset_x, int offset_y){
15
+    
16
+
17
+    // YOUR CODE HERE
18
+
19
+
20
+}

+ 29
- 0
GreenScreenLab.pro View File

@@ -0,0 +1,29 @@
1
+#-------------------------------------------------
2
+#
3
+# Project created by QtCreator 2014-04-06T14:26:51
4
+#
5
+#-------------------------------------------------
6
+
7
+QT       += core gui
8
+
9
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10
+
11
+TARGET = GreenScreen
12
+TEMPLATE = app
13
+
14
+
15
+SOURCES += main.cpp\
16
+    Filter.cpp \
17
+    MergePanel.cpp \
18
+    ClickableLabel.cpp
19
+
20
+HEADERS  += \
21
+    MergePanel.h \
22
+    ClickableLabel.h
23
+
24
+FORMS    += \
25
+    MergePanel.ui
26
+
27
+RESOURCES += \
28
+    images.qrc \
29
+    style.qrc

+ 181
- 0
MergePanel.cpp View File

@@ -0,0 +1,181 @@
1
+#include "MergePanel.h"
2
+#include "ui_MergePanel.h"
3
+#include <QDebug>
4
+
5
+#include "ClickableLabel.h"
6
+
7
+/// \fn MainWindow::MainWindow(QWidget *parent)
8
+/// \~English
9
+/// \brief Default Constructor for the MainWindow.
10
+/// \~Spanish
11
+/// \brief Constructor por defecto del MainWindow.
12
+MainWindow::MainWindow(QWidget *parent) :
13
+    QMainWindow(parent),
14
+    ui(new Ui::MainWindow)
15
+{
16
+    ui->setupUi(this);
17
+
18
+    // Signal connections
19
+    // Conexion de senales
20
+
21
+    // Closes window with cmd + w
22
+    // Cierra la ventana con cmd + w
23
+    new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this, SLOT(close()));
24
+    // Opens a image with cmd + o
25
+    // Abre una imagen con cmd + o
26
+    new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_O), this, SLOT(on_btnSelectImage_clicked()));
27
+    // Opens background image with cmd + n
28
+    // Abre imagen de transfondo con cmd + n
29
+    new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_N), this, SLOT(on_btnSelectBackground_clicked()));
30
+    // Saves an image with cmd + s
31
+    // Guarda una imagen con cmd + s
32
+    new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_S), this, SLOT(on_btnSaveImage_clicked()));
33
+    // Merges two images with cmd + m
34
+    // Fuciona dos imagenes con cmd + m
35
+    new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_M), this, SLOT(on_btnMergeImages_clicked()));
36
+    // Makes the label clickable.
37
+    // Hace el labelWidget cliqueable.
38
+    connect(ui->lblOriginalImage, SIGNAL(Mouse_Pressed()), this, SLOT(Mouse_Pressed()));
39
+    connect(ui->lblBackgroundImage, SIGNAL(Mouse_Pressed()), this, SLOT(Mouse_PressedBackground())) ;
40
+}
41
+
42
+/// \fn MainWindow::~MainWindow(QWidget *parent)
43
+/// \~English
44
+/// \brief Destructor for the MainWindow.
45
+/// \~Spanish
46
+/// \brief Destructor del MainWindow.
47
+MainWindow::~MainWindow(){
48
+    delete ui;
49
+}
50
+
51
+/// \fn void MainWindow::on_btnSelectImage_clicked()
52
+/// \~English
53
+/// \brief Display the file browsing window to load an image. (Green Background)
54
+/// \~Spanish
55
+/// \brief Despliega la ventana de busqueda de archivos para subir una imagen. (Trasfondo verde)
56
+void MainWindow::on_btnSelectImage_clicked(){
57
+    QString fname = QFileDialog::getOpenFileName(this, tr("Choose an image"), QDir::homePath());
58
+        if (!fname.isEmpty()){
59
+            QImage image(fname);
60
+            if (image.isNull()){
61
+                QMessageBox::information(this, tr("Choose an image"),tr("Cannot load %1.").arg(fname));
62
+                return ;
63
+            }
64
+            originalImage=image;
65
+        }
66
+    ui->lblOriginalImage->setPixmap(QPixmap::fromImage(originalImage));
67
+    ui->origSize->setText("Original Image Size: " + QString::number(originalImage.width()) + "x" +QString::number(originalImage.height()));
68
+}
69
+
70
+/// \fn void MainWindow::on_btnSelectBackground_clicked()
71
+/// \~English
72
+/// \brief Display the file browsing window to load a background image.
73
+/// \~Spanish
74
+/// \brief Despliega la ventana de busqueda de archivos para subir una imagen para el trasfondo.
75
+void MainWindow::on_btnSelectBackground_clicked(){
76
+    QString fname = QFileDialog::getOpenFileName(this, tr("Choose an image"), QDir::homePath());
77
+        if (!fname.isEmpty()){
78
+            QImage image(fname);
79
+            if (image.isNull()){
80
+                QMessageBox::information(this, tr("Choose an image"),tr("Cannot load %1.").arg(fname));
81
+                return ;
82
+            }
83
+            backgroundImage=image;
84
+        }
85
+    ui->lblBackgroundImage->setPixmap(QPixmap::fromImage(backgroundImage));
86
+    ui->bgSize->setText("Original Image Size: " + QString::number(backgroundImage.width()) + "x" +QString::number(backgroundImage.height()));
87
+}
88
+
89
+/// \fn void MainWindow::on_btnMergeImages_clicked()
90
+/// \~English
91
+/// \brief  Invokes the function that merges the green screen image with the background image,
92
+/// then displays the merged image.
93
+/// \~Spanish
94
+/// \brief Invoca la funcion que fusional la imagen con transfondo verde con la imagen de transfondo,
95
+/// entonces displiega la imagen fusionada.
96
+void MainWindow::on_btnMergeImages_clicked(){
97
+    if (originalImage.width() > backgroundImage.width() || originalImage.height() > backgroundImage.height()){
98
+        originalImage = originalImage.scaled(backgroundImage.width(), backgroundImage.height(), Qt::KeepAspectRatio, Qt::FastTransformation) ;
99
+    }
100
+    mergedImage = backgroundImage;
101
+    MergeImages(originalImage, backgroundImage, mergedImage, ui->thresholdSlider->value(),ui->ghostBox->isChecked(), ui->lblOriginalImage->x, ui->lblOriginalImage->y, ui->lblBackgroundImage->x, ui->lblBackgroundImage->y);
102
+    ui->lblMergedImage->setPixmap(QPixmap::fromImage(mergedImage));
103
+
104
+}
105
+
106
+/// \fn void MainWindow::on_btnSaveImage_clicked()
107
+/// \~English
108
+/// \brief Displays the file browse window to choose the path to save
109
+/// the merged image in the file system.
110
+/// \~Spanish
111
+/// \brief Despliega la ventana de busqueda de archivos para escoger un camino
112
+/// guardar la imagen fusionada en el sistema de archivos.
113
+void MainWindow::on_btnSaveImage_clicked(){
114
+    if(!mergedImage.isNull()){
115
+        QPixmap out = QPixmap::grabWidget(this,361,10,481,481);
116
+        QString fname = QFileDialog::getSaveFileName(this, tr("Save Merged Image"), (""), tr("PNG (*.png)" ));
117
+        mergedImage.save(fname, "PNG");
118
+    }
119
+}
120
+
121
+/// \fn void MainWindow::Mouse_Pressed()
122
+/// \~English
123
+/// \brief Function that gets the coordinates of the image with the greenscreen.
124
+/// \~Spanish
125
+/// \brief Funcion que obtiene las coordenada de la imagen con el trasfondo verde.
126
+void MainWindow::Mouse_Pressed(){
127
+    if (!originalImage.isNull()){
128
+        if (originalImage.height() < ui->lblOriginalImage->height())
129
+               ui->lblOriginalImage->y = ui->lblOriginalImage->y * ui->lblOriginalImage->height()/originalImage.height();
130
+        else
131
+               ui->lblOriginalImage->y = ui->lblOriginalImage->y * originalImage.height()/ui->lblOriginalImage->height();
132
+        if(originalImage.width() < ui->lblOriginalImage->width())
133
+             ui->lblOriginalImage->x = ui->lblOriginalImage->x * ui->lblOriginalImage->width()/originalImage.width();
134
+        else
135
+            ui->lblOriginalImage->x = ui->lblOriginalImage->x * originalImage.width()/ui->lblOriginalImage->width();
136
+        ui->origCoord->setText("Selected Coord: (" + QString::number(ui->lblOriginalImage->x) + ","+QString::number(ui->lblOriginalImage->y) + ")" );
137
+    }
138
+}
139
+
140
+/// \fn void MainWindow::Mouse_Pressed()
141
+/// \~English
142
+/// \brief Function that gets the coordinaates of the image with the final background.
143
+/// \~Spanish
144
+/// \brief Funcion que obtiene las coordenada de la imagen con el trasfondo final.
145
+void MainWindow::Mouse_PressedBackground(){
146
+    if (!backgroundImage.isNull()){
147
+        if (backgroundImage.height() < ui->lblBackgroundImage->height())
148
+                ui->lblBackgroundImage->y = ui->lblBackgroundImage->y * ui->lblBackgroundImage->height()/backgroundImage.height();
149
+        else
150
+               ui->lblBackgroundImage->y = ui->lblBackgroundImage->y * backgroundImage.height()/ui->lblBackgroundImage->height();
151
+        if(backgroundImage.width() < ui->lblBackgroundImage->width())
152
+             ui->lblBackgroundImage->x = ui->lblBackgroundImage->x * ui->lblBackgroundImage->width()/backgroundImage.width();
153
+        else
154
+            ui->lblBackgroundImage->x = ui->lblBackgroundImage->x * backgroundImage.width()/ui->lblBackgroundImage->width();
155
+        ui->backCoord->setText("Selected Coord: (" + QString::number(ui->lblBackgroundImage->x) + ","+QString::number(ui->lblBackgroundImage->y) + ")" );
156
+    }
157
+}
158
+
159
+/// \fn void MainWindow::on_thresholdSlider_actionTriggered()
160
+/// \~English
161
+/// \brief Invokes the function that merges the green screen image with the background image.
162
+/// \~Spanish
163
+/// \brief Invoca la funcion que fusiona la imagen de trasfondo verde con la imagen del trasfondo final.
164
+void MainWindow::on_thresholdSlider_actionTriggered(){
165
+    if (originalImage.width() > backgroundImage.width() || originalImage.height() > backgroundImage.height())
166
+        originalImage = originalImage.scaled(backgroundImage.width(), backgroundImage.height(), Qt::KeepAspectRatio, Qt::FastTransformation) ;
167
+    mergedImage = backgroundImage;
168
+    MergeImages(originalImage, backgroundImage, mergedImage, ui->thresholdSlider->value(), ui->ghostBox->isChecked(), ui->lblOriginalImage->x, ui->lblOriginalImage->y, ui->lblBackgroundImage->x, ui->lblBackgroundImage->y);
169
+    ui->lblMergedImage->setPixmap(QPixmap::fromImage(mergedImage));
170
+}
171
+
172
+/// \fn void MainWindow::on_ghostBox_clicked()
173
+/// \~English
174
+/// \brief Funtion that invokes the thresholdSlider function and creates a
175
+/// ghost version of the image with greenscreen background.
176
+/// \~Spanish
177
+/// \brief Funcion que invoca la funcion thresholdSlider y crea una version
178
+/// fantasma de la imagen con el trasfondo verde.
179
+void MainWindow::on_ghostBox_clicked(){
180
+    on_thresholdSlider_actionTriggered();
181
+}

+ 122
- 0
MergePanel.h View File

@@ -0,0 +1,122 @@
1
+#ifndef MAINWINDOW_H
2
+#define MAINWINDOW_H
3
+
4
+#include <QMainWindow>
5
+#include <QFileDialog>
6
+#include <QDir>
7
+#include <QMessageBox>
8
+#include <QShortcut>
9
+#include <QImage>
10
+#include <QDebug>
11
+#include <cmath>
12
+
13
+/// Main class for the program.
14
+///
15
+/// This class contains the main functions for the program.
16
+/// There are functions for merging two images together,
17
+/// a function that creates a ghost version of the first image on the merge image,
18
+/// and the functions for the GUI.
19
+
20
+namespace Ui {
21
+class MainWindow;
22
+}
23
+
24
+class MainWindow : public QMainWindow
25
+{
26
+    Q_OBJECT
27
+
28
+public:
29
+    /// \fn MainWindow::MainWindow(QWidget *parent)
30
+    /// \~English
31
+    /// \brief Default Constructor for the MainWindow.
32
+    /// \~Spanish
33
+    /// \brief Constructor por defecto del MainWindow.
34
+    explicit MainWindow(QWidget *parent = 0);
35
+
36
+    /// \fn void MainWindow::MergeImages(const QImage &objectImage, const QImage &backgroundImage, QImage & mergedImage, int threshold, bool ghost, int x, int y, int offset_x, int offset_y)
37
+    /// \~English
38
+    /// \brief Funcion that merges two images together. It takes an image with any background color
39
+    /// and puts it in another image that will act as a background. (Implements Greenscreen techonology)
40
+    /// \~Spanish
41
+    /// \brief Funcion que fusiona dos imagenes juntas.  Toma una image con cualquier color de trasfondo
42
+    /// y lo pone en otra imagen que actual como el  trasfondo. (Implementa la tecnologia de trasfondo verde)
43
+    void MergeImages(const QImage &, const QImage &, QImage &, int, bool=false, int=0, int=0, int=0, int=0) ;
44
+
45
+    /// \fn MainWindow::~MainWindow(QWidget *parent)
46
+    /// \~English
47
+    /// \brief Destructor for the MainWindow.
48
+    /// \~Spanish
49
+    /// \brief Destructor del MainWindow.
50
+    ~MainWindow();
51
+
52
+private slots:
53
+    /// \fn void MainWindow::on_ghostBox_clicked()
54
+    /// \~English
55
+    /// \brief Funtion that invokes the thresholdSlider function and creates a
56
+    /// ghost version of the image with greenscreen background.
57
+    /// \~Spanish
58
+    /// \brief Funcion que invoca la funcion thresholdSlider y crea una version
59
+    /// fantasma de la imagen con el trasfondo verde.
60
+    void on_ghostBox_clicked();
61
+
62
+    /// \fn void MainWindow::on_btnSelectImage_clicked()
63
+    /// \~English
64
+    /// \brief Display the file browsing window to load an image. (Green Background)
65
+    /// \~Spanish
66
+    /// \brief Despliega la ventana de busqueda de archivos para subir una imagen. (Trasfondo verde)
67
+    void on_btnSelectImage_clicked();
68
+
69
+    /// \fn void MainWindow::on_btnSelectBackground_clicked()
70
+    /// \~English
71
+    /// \brief Display the file browsing window to load a background image.
72
+    /// \~Spanish
73
+    /// \brief Despliega la ventana de busqueda de archivos para subir una imagen para el trasfondo.
74
+    void on_btnSelectBackground_clicked();
75
+
76
+    /// \fn void MainWindow::on_btnMergeImages_clicked()
77
+    /// \~English
78
+    /// \brief  Invokes the function that merges the green screen image with the background image,
79
+    /// then displays the merged image.
80
+    /// \~Spanish
81
+    /// \brief Invoca la funcion que fusional la imagen con transfondo verde con la imagen de transfondo,
82
+    /// entonces displiega la imagen fusionada.
83
+    void on_btnMergeImages_clicked();
84
+
85
+    /// \fn void MainWindow::on_btnSaveImage_clicked()
86
+    /// \~English
87
+    /// \brief Displays the file browse window to choose the path to save
88
+    /// the merged image in the file system.
89
+    /// \~Spanish
90
+    /// \brief Despliega la ventana de busqueda de archivos para escoger un camino
91
+    /// guardar la imagen fusionada en el sistema de archivos.
92
+    void on_btnSaveImage_clicked();
93
+
94
+    /// \fn void MainWindow::Mouse_Pressed()
95
+    /// \~English
96
+    /// \brief Function that gets the coordinates of the image with the greenscreen.
97
+    /// \~Spanish
98
+    /// \brief Funcion que obtiene las coordenada de la imagen con el trasfondo verde.
99
+    void Mouse_Pressed();
100
+
101
+    /// \fn void MainWindow::Mouse_Pressed()
102
+    /// \~English
103
+    /// \brief Function that gets the coordinaates of the image with the final background.
104
+    /// \~Spanish
105
+    /// \brief Funcion que obtiene las coordenada de la imagen con el trasfondo final.
106
+    void Mouse_PressedBackground() ;
107
+
108
+    /// \fn void MainWindow::on_thresholdSlider_actionTriggered()
109
+    /// \~English
110
+    /// \brief Invokes the function that merges the green screen image with the background image.
111
+    /// \~Spanish
112
+    /// \brief Invoca la funcion que fusiona la imagen de trasfondo verde con la imagen del trasfondo final.
113
+    void on_thresholdSlider_actionTriggered();
114
+
115
+private:
116
+    Ui::MainWindow *ui;
117
+    QImage originalImage;
118
+    QImage backgroundImage;
119
+    QImage mergedImage;
120
+};
121
+
122
+#endif // MAINWINDOW_H

+ 434
- 0
MergePanel.ui View File

@@ -0,0 +1,434 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<ui version="4.0">
3
+ <class>MainWindow</class>
4
+ <widget class="QMainWindow" name="MainWindow">
5
+  <property name="geometry">
6
+   <rect>
7
+    <x>0</x>
8
+    <y>0</y>
9
+    <width>810</width>
10
+    <height>595</height>
11
+   </rect>
12
+  </property>
13
+  <property name="minimumSize">
14
+   <size>
15
+    <width>800</width>
16
+    <height>400</height>
17
+   </size>
18
+  </property>
19
+  <property name="maximumSize">
20
+   <size>
21
+    <width>1500</width>
22
+    <height>600</height>
23
+   </size>
24
+  </property>
25
+  <property name="windowTitle">
26
+   <string>MainWindow</string>
27
+  </property>
28
+  <widget class="QWidget" name="centralWidget">
29
+   <property name="minimumSize">
30
+    <size>
31
+     <width>1271</width>
32
+     <height>0</height>
33
+    </size>
34
+   </property>
35
+   <widget class="QWidget" name="verticalLayoutWidget">
36
+    <property name="geometry">
37
+     <rect>
38
+      <x>10</x>
39
+      <y>120</y>
40
+      <width>262</width>
41
+      <height>321</height>
42
+     </rect>
43
+    </property>
44
+    <layout class="QVBoxLayout" name="verticalLayout">
45
+     <item>
46
+      <widget class="ClickableLabel" name="lblOriginalImage">
47
+       <property name="sizePolicy">
48
+        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
49
+         <horstretch>0</horstretch>
50
+         <verstretch>0</verstretch>
51
+        </sizepolicy>
52
+       </property>
53
+       <property name="minimumSize">
54
+        <size>
55
+         <width>260</width>
56
+         <height>260</height>
57
+        </size>
58
+       </property>
59
+       <property name="maximumSize">
60
+        <size>
61
+         <width>350</width>
62
+         <height>350</height>
63
+        </size>
64
+       </property>
65
+       <property name="mouseTracking">
66
+        <bool>false</bool>
67
+       </property>
68
+       <property name="frameShape">
69
+        <enum>QFrame::Box</enum>
70
+       </property>
71
+       <property name="frameShadow">
72
+        <enum>QFrame::Sunken</enum>
73
+       </property>
74
+       <property name="text">
75
+        <string/>
76
+       </property>
77
+       <property name="scaledContents">
78
+        <bool>true</bool>
79
+       </property>
80
+       <property name="buddy">
81
+        <cstring>btnSelectImage</cstring>
82
+       </property>
83
+      </widget>
84
+     </item>
85
+    </layout>
86
+   </widget>
87
+   <widget class="QWidget" name="verticalLayoutWidget_2">
88
+    <property name="geometry">
89
+     <rect>
90
+      <x>270</x>
91
+      <y>120</y>
92
+      <width>262</width>
93
+      <height>321</height>
94
+     </rect>
95
+    </property>
96
+    <layout class="QVBoxLayout" name="verticalLayout_2">
97
+     <item>
98
+      <widget class="ClickableLabel" name="lblBackgroundImage">
99
+       <property name="enabled">
100
+        <bool>true</bool>
101
+       </property>
102
+       <property name="minimumSize">
103
+        <size>
104
+         <width>260</width>
105
+         <height>260</height>
106
+        </size>
107
+       </property>
108
+       <property name="maximumSize">
109
+        <size>
110
+         <width>350</width>
111
+         <height>350</height>
112
+        </size>
113
+       </property>
114
+       <property name="mouseTracking">
115
+        <bool>false</bool>
116
+       </property>
117
+       <property name="frameShape">
118
+        <enum>QFrame::Box</enum>
119
+       </property>
120
+       <property name="frameShadow">
121
+        <enum>QFrame::Sunken</enum>
122
+       </property>
123
+       <property name="text">
124
+        <string/>
125
+       </property>
126
+       <property name="scaledContents">
127
+        <bool>true</bool>
128
+       </property>
129
+       <property name="buddy">
130
+        <cstring>btnSelectBackground</cstring>
131
+       </property>
132
+      </widget>
133
+     </item>
134
+    </layout>
135
+   </widget>
136
+   <widget class="QWidget" name="verticalLayoutWidget_3">
137
+    <property name="geometry">
138
+     <rect>
139
+      <x>530</x>
140
+      <y>120</y>
141
+      <width>262</width>
142
+      <height>321</height>
143
+     </rect>
144
+    </property>
145
+    <layout class="QVBoxLayout" name="verticalLayout_3">
146
+     <item>
147
+      <widget class="QLabel" name="lblMergedImage">
148
+       <property name="enabled">
149
+        <bool>true</bool>
150
+       </property>
151
+       <property name="minimumSize">
152
+        <size>
153
+         <width>260</width>
154
+         <height>200</height>
155
+        </size>
156
+       </property>
157
+       <property name="maximumSize">
158
+        <size>
159
+         <width>350</width>
160
+         <height>350</height>
161
+        </size>
162
+       </property>
163
+       <property name="frameShape">
164
+        <enum>QFrame::Box</enum>
165
+       </property>
166
+       <property name="frameShadow">
167
+        <enum>QFrame::Sunken</enum>
168
+       </property>
169
+       <property name="text">
170
+        <string/>
171
+       </property>
172
+       <property name="scaledContents">
173
+        <bool>true</bool>
174
+       </property>
175
+      </widget>
176
+     </item>
177
+    </layout>
178
+   </widget>
179
+   <widget class="QWidget" name="layoutWidget1">
180
+    <property name="geometry">
181
+     <rect>
182
+      <x>20</x>
183
+      <y>450</y>
184
+      <width>251</width>
185
+      <height>42</height>
186
+     </rect>
187
+    </property>
188
+    <layout class="QVBoxLayout" name="verticalLayout_4">
189
+     <item>
190
+      <widget class="QLabel" name="origCoord">
191
+       <property name="text">
192
+        <string>Selected Coord: (0,0)</string>
193
+       </property>
194
+      </widget>
195
+     </item>
196
+     <item>
197
+      <widget class="QLabel" name="origSize">
198
+       <property name="text">
199
+        <string>Original Image Size: 0x0</string>
200
+       </property>
201
+      </widget>
202
+     </item>
203
+    </layout>
204
+   </widget>
205
+   <widget class="QWidget" name="layoutWidget">
206
+    <property name="geometry">
207
+     <rect>
208
+      <x>280</x>
209
+      <y>450</y>
210
+      <width>251</width>
211
+      <height>42</height>
212
+     </rect>
213
+    </property>
214
+    <layout class="QVBoxLayout" name="verticalLayout_5">
215
+     <item>
216
+      <widget class="QLabel" name="backCoord">
217
+       <property name="enabled">
218
+        <bool>true</bool>
219
+       </property>
220
+       <property name="text">
221
+        <string>Selected Coord: (0, 0)</string>
222
+       </property>
223
+      </widget>
224
+     </item>
225
+     <item>
226
+      <widget class="QLabel" name="bgSize">
227
+       <property name="text">
228
+        <string>Original Image Size: 0x0</string>
229
+       </property>
230
+      </widget>
231
+     </item>
232
+    </layout>
233
+   </widget>
234
+   <widget class="QFrame" name="LogoFrame">
235
+    <property name="geometry">
236
+     <rect>
237
+      <x>20</x>
238
+      <y>500</y>
239
+      <width>201</width>
240
+      <height>61</height>
241
+     </rect>
242
+    </property>
243
+    <property name="styleSheet">
244
+     <string notr="true"/>
245
+    </property>
246
+    <property name="frameShape">
247
+     <enum>QFrame::StyledPanel</enum>
248
+    </property>
249
+    <property name="frameShadow">
250
+     <enum>QFrame::Raised</enum>
251
+    </property>
252
+   </widget>
253
+   <widget class="QPushButton" name="btnSelectImage">
254
+    <property name="geometry">
255
+     <rect>
256
+      <x>10</x>
257
+      <y>70</y>
258
+      <width>251</width>
259
+      <height>41</height>
260
+     </rect>
261
+    </property>
262
+    <property name="styleSheet">
263
+     <string notr="true"/>
264
+    </property>
265
+    <property name="text">
266
+     <string>Select Image</string>
267
+    </property>
268
+   </widget>
269
+   <widget class="QPushButton" name="btnSelectBackground">
270
+    <property name="geometry">
271
+     <rect>
272
+      <x>270</x>
273
+      <y>70</y>
274
+      <width>251</width>
275
+      <height>41</height>
276
+     </rect>
277
+    </property>
278
+    <property name="styleSheet">
279
+     <string notr="true"/>
280
+    </property>
281
+    <property name="text">
282
+     <string>Select Background Image</string>
283
+    </property>
284
+   </widget>
285
+   <widget class="QPushButton" name="btnMergeImages">
286
+    <property name="geometry">
287
+     <rect>
288
+      <x>530</x>
289
+      <y>70</y>
290
+      <width>270</width>
291
+      <height>41</height>
292
+     </rect>
293
+    </property>
294
+    <property name="styleSheet">
295
+     <string notr="true"/>
296
+    </property>
297
+    <property name="text">
298
+     <string>Merge Images</string>
299
+    </property>
300
+   </widget>
301
+   <widget class="QFrame" name="Banner">
302
+    <property name="geometry">
303
+     <rect>
304
+      <x>-10</x>
305
+      <y>-30</y>
306
+      <width>861</width>
307
+      <height>91</height>
308
+     </rect>
309
+    </property>
310
+    <property name="styleSheet">
311
+     <string notr="true"/>
312
+    </property>
313
+    <property name="frameShape">
314
+     <enum>QFrame::StyledPanel</enum>
315
+    </property>
316
+    <property name="frameShadow">
317
+     <enum>QFrame::Raised</enum>
318
+    </property>
319
+    <widget class="QLabel" name="HeaderLabel">
320
+     <property name="geometry">
321
+      <rect>
322
+       <x>250</x>
323
+       <y>20</y>
324
+       <width>271</width>
325
+       <height>61</height>
326
+      </rect>
327
+     </property>
328
+     <property name="font">
329
+      <font>
330
+       <pointsize>25</pointsize>
331
+      </font>
332
+     </property>
333
+     <property name="styleSheet">
334
+      <string notr="true"/>
335
+     </property>
336
+     <property name="text">
337
+      <string>Green Screen Lab</string>
338
+     </property>
339
+    </widget>
340
+   </widget>
341
+   <widget class="QWidget" name="layoutWidget_3">
342
+    <property name="geometry">
343
+     <rect>
344
+      <x>540</x>
345
+      <y>450</y>
346
+      <width>261</width>
347
+      <height>71</height>
348
+     </rect>
349
+    </property>
350
+    <layout class="QVBoxLayout" name="verticalLayout_7">
351
+     <item>
352
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
353
+       <item>
354
+        <widget class="QLabel" name="label">
355
+         <property name="text">
356
+          <string>Threshold</string>
357
+         </property>
358
+        </widget>
359
+       </item>
360
+       <item>
361
+        <widget class="QSlider" name="thresholdSlider">
362
+         <property name="minimum">
363
+          <number>0</number>
364
+         </property>
365
+         <property name="value">
366
+          <number>10</number>
367
+         </property>
368
+         <property name="orientation">
369
+          <enum>Qt::Horizontal</enum>
370
+         </property>
371
+        </widget>
372
+       </item>
373
+      </layout>
374
+     </item>
375
+     <item>
376
+      <widget class="QCheckBox" name="ghostBox">
377
+       <property name="text">
378
+        <string>Ghost</string>
379
+       </property>
380
+      </widget>
381
+     </item>
382
+    </layout>
383
+   </widget>
384
+   <widget class="QPushButton" name="btnSaveImage">
385
+    <property name="geometry">
386
+     <rect>
387
+      <x>540</x>
388
+      <y>530</y>
389
+      <width>259</width>
390
+      <height>31</height>
391
+     </rect>
392
+    </property>
393
+    <property name="styleSheet">
394
+     <string notr="true"/>
395
+    </property>
396
+    <property name="text">
397
+     <string>Save Merged Image</string>
398
+    </property>
399
+   </widget>
400
+   <zorder>layoutWidget</zorder>
401
+   <zorder>layoutWidget</zorder>
402
+   <zorder>verticalLayoutWidget</zorder>
403
+   <zorder>verticalLayoutWidget_2</zorder>
404
+   <zorder>verticalLayoutWidget_3</zorder>
405
+   <zorder>LogoFrame</zorder>
406
+   <zorder>btnSelectImage</zorder>
407
+   <zorder>btnSelectBackground</zorder>
408
+   <zorder>btnMergeImages</zorder>
409
+   <zorder>Banner</zorder>
410
+   <zorder>layoutWidget_3</zorder>
411
+   <zorder>btnSaveImage</zorder>
412
+  </widget>
413
+  <widget class="QMenuBar" name="menuBar">
414
+   <property name="geometry">
415
+    <rect>
416
+     <x>0</x>
417
+     <y>0</y>
418
+     <width>810</width>
419
+     <height>25</height>
420
+    </rect>
421
+   </property>
422
+  </widget>
423
+ </widget>
424
+ <layoutdefault spacing="6" margin="11"/>
425
+ <customwidgets>
426
+  <customwidget>
427
+   <class>ClickableLabel</class>
428
+   <extends>QLabel</extends>
429
+   <header location="global">ClickableLabel.h</header>
430
+  </customwidget>
431
+ </customwidgets>
432
+ <resources/>
433
+ <connections/>
434
+</ui>

+ 632
- 0
README.md View File

@@ -0,0 +1,632 @@
1
+[English](#markdown-header-arrays-green-screen) | [Español](#markdown-header-arreglos-pantalla-verde)
2
+
3
+#Arreglos - Pantalla Verde
4
+
5
+![main1.png](images/main1.png)
6
+![main2.png](images/main2.png)
7
+![main3.png](images/main3.png)
8
+
9
+Los arreglos de datos (*arrays*) nos facilitan guardar y trabajar con grupos de datos del mismo tipo. Los datos se guardan en espacios de memoria consecutivos a los que se puede acceder utilizando el nombre del arreglo e índices o suscritos que indican la posición en que se encuentra el dato. Las estructuras de repetición nos proveen una manera simple de acceder a los datos de un arreglo. En la experiencia de laboratorio de hoy practicarás el uso de ciclos anidados en la manipulación de arreglos bi-dimensionales usando técnicas de "pantalla verde".
10
+
11
+
12
+##Objetivos:
13
+
14
+1. Practicar el acceso y manipulación de  datos en un arreglo.
15
+
16
+2. Aplicar ciclos anidados para implementar técnicas de "pantalla verde".
17
+
18
+3. Utilizar expresiones aritméticas y estructuras de selección para transformar colores de píxeles.
19
+
20
+4. Acceder píxeles en una imagen y descomponerlos en sus componentes rojo, azul y verde.
21
+
22
+
23
+##Pre-Lab:
24
+
25
+Antes de llegar al laboratorio debes:
26
+
27
+1. Haber repasado los conceptos básicos relacionados a estructuras de repetición, ciclos anidados y arreglos bi-dimensionales.
28
+
29
+2. Conocer los métodos básicos de `QImage` para manipular los pixeles de las imágenes. 
30
+
31
+3. Haber estudiado los conceptos e instrucciones para la sesión de laboratorio.
32
+
33
+4. Haber tomado el quiz Pre-Lab que se encuentra en Moodle.
34
+
35
+---
36
+
37
+---
38
+
39
+##Tecnología de pantalla verde ("Green Screen")
40
+
41
+En esta experiencia de laboratorio, aprenderás los conceptos y destrezas básicas de la tecnología de pantalla verde que se usa en boletines informativos de televisión, películas, juegos de video y otros. La composición de pantalla verde, o composición cromática, es una técnica que se usa para combinar dos imágenes o cuadros de video [1]. Esta técnica de post-producción  crea efectos especiales al componer  dos imágenes o transmisiones de video sustituyendo el área de un color sólido por otra imágen [2]. La composición cromática se puede hacer con imágenes de objetos sobre fondos de cualquier color que sean uniformes y diferentes a los de la imagen. Los fondos azules y verdes son los que se usan con más frecuencia porque se distinguen con más facilidad de los tonos de la mayoría de los colores de piel humanos.
42
+
43
+Para esta experiencia de laboratorio te proveemos un interfaz gráfico (GUI) simple que permite al usuario cargar una imagen con un objeto sobre un fondo de color sólido (preferiblemente azul o verde) y una imagen para sustituir el fondo. Tu tarea es crear e implementar una función que cree una tercera imagen compuesta en la cual, a la imagen del objeto  con el fondo de color sólido se le removerá el color de fondo y el objeto aparecerá sobre la imagen que será el nuevo fondo. La Figura 1 muestra un ejemplo de los resultados esperados.
44
+
45
+---
46
+
47
+![figure1.png](images/figure1.png)
48
+
49
+**Figura 1.** Ejemplo de los resultados esperados. El objeto de interés es la mano con las gafas.
50
+
51
+---
52
+
53
+Con el propósito de ilustrar el procedimiento, llamemos la imagen del objeto con el fondo de color sólido  *imagen A*, y supongamos que el color sólido en el fondo tiene un "RGB" `0x00ff00` (verde puro). Llamemos *imagen B* a la imagen que usaremos para el fondo, un fondo que resulte interesante. Para este ejemplo, supongamos también que los tamaños de ambas imágenes son iguales (mismo ancho y alto).
54
+
55
+Para producir la imagen compuesta (*imagen C*), podríamos comenzar copiando toda la *imagen B* que usaremos de fondo a la *imagen C*. Luego, para insertar solo el objeto que nos interesa en la imagen compuesta podemos recorrer la *imagen A* píxel por píxel. Compararíamos el color de cada píxel *p* en la *imagen A* con el color de fondo `0x00ff00`. Si son *similares*, el píxel de la *imagen A* corresponde al color sólido de fondo y dejamos el píxel de la *imagen C* como está (el fondo nuevo). Si el color de *p* no es *similar* a `0x00ff00`, modificamos el píxel correspondiente en la *imagen C*, copiando el color del píxel del objeto a la imagen compuesta. Esto se ilustra en la Figura 2.
56
+
57
+---
58
+
59
+![figure2.png](images/figure2.png)
60
+
61
+**Figura 2.** Ilustración de cómo el algoritmo decide cuáles píxeles de la *imagen A* incluir en la *imagen C*.
62
+
63
+---
64
+
65
+---
66
+
67
+##Píxeles
68
+
69
+Al elemento más pequeño de una imagen se le llama un *píxel*. Esta unidad consiste de un solo color. Como cada color es una combinación de tonalidades de los colores primarios rojo, verde y azul,   se codifica como un entero sin signo cuyos bytes  representan los tonos de rojo, verde y azul del pixel  (Figura 3). A esta combinación se le llama el *RGB* del color por las siglas de "Red-Green-Blue". Por ejemplo un píxel de color rojo (puro) tiene una representación RGB `0x00ff0000`, mientras que un píxel de color blanco tiene una representación RGB de `0x00FFFFFF` (ya que el color blanco es la combinación de los tonos rojo, verde y azul en toda su intensidad).
70
+
71
+---
72
+
73
+![figure3.png](images/figure3.png)
74
+
75
+**Figura 3.** Distribución de bits para las tonalidades de rojo, verde y azul dentro de la representación RGB.  Cada tonalidad puede tener valores entre 0x00 (los ocho bits en 0) y 0xFF (los 8 bits en 1). 
76
+
77
+---
78
+
79
+En `Qt` se utiliza el tipo `QRgb` para representar valores `RGB`.  Utilizando ciertas funciones que describimos abajo podemos obtener los componentes rojo, verde y azul del valor `QRgb` del píxel y así manipular imágenes.
80
+
81
+###Biblioteca
82
+
83
+La experiencia de laboratorio de hoy utilizará la clase `QImage`. Esta clase permite acceder a los datos de los pixeles de una imagen para poder manipularla. La documentación de la clase `QImage` se encuentra en http://doc.qt.io/qt-4.8/qimage.html.
84
+
85
+El código que te proveemos contiene los siguiente objetos de la clase `QImage`:
86
+
87
+* `originalImage`   // contiene la información de la imagen original que vas a editar
88
+*  `editedImage`  // contendrá la imagen editada
89
+
90
+Los objetos de clase `QImage` tienen los siguiente métodos que serán útiles para la experiencia de laboratorio de hoy:
91
+
92
+
93
+* `width()`      // devuelve el valor entero del ancho de la imagen
94
+* `height()`      // devuelve el valor entero de la altura de la imagen
95
+* `pixel(i, j)`       // devuelve el `QRgb` del píxel en la posición `(i,j)`
96
+* `setPixel(i,j, pixel)`   // modifica el valor del píxel en la posición `(i, j)` al valor píxel `QRgb`
97
+
98
+Las siguientes funciones son útiles para trabajar con datos de tipo `QRgb`:
99
+
100
+
101
+* `qRed(pixel)`   // devuelve el tono del color rojo del píxel
102
+* `qGreen(pixel)` // devuelve el tono del color verde del píxel
103
+* `qBlue(pixel)`  // devuelve el tono del color azul del píxel
104
+* `qRgb(int red, int green, int blue)` // devuelve un píxel `QRgb` compuesto de los valores de rojo, verde y azul recibidos.
105
+
106
+
107
+####Ejemplos:
108
+
109
+1. `QRgb myRgb = qRgb(0xff, 0x00, 0xff);`: Asigna a `myRgb` el valor `0xff00ff` que representa el color ![figure4.png](images/figure4.png)
110
+
111
+    Nota que el valor `0xff00ff` representa los valores `0xff`, `0x0`, `0xff`, que corresponden a los componentes rojo, verde y azul de `myRgb`.
112
+
113
+2. Si la siguiente imagen `4 x 4` de píxeles representa el objeto `originalImage`,
114
+
115
+    ![ejemplo.png](images/ejemplo.png)
116
+
117
+  entonces `originalImage.pixel(2,1)` devuelve un valor `rgb` que representa el color azul (`0x0000ff`).
118
+
119
+3. La siguiente instrucción asigna el color rojo al píxel en posición `(2,3)` en la imagen editada:
120
+
121
+  `editedImage.setPixel(2,3,qRgb(0xff,0x00,0x00));`.
122
+
123
+4. La siguiente instrucción le asigna a `greenContent` el valor del tono de verde que contiene el pixel `(1,1)` de  `originalImage`:
124
+
125
+  `int greenContent = qGreen(originalImage.pixel(1,1));`.
126
+
127
+
128
+5. El siguiente programa crea un objeto de clase `QImage` e imprime los componentes rojo, verde y azul del pixel en el centro de la imagen. La imagen utilizada es la que se especifica dentro del paréntesis durante la creación del objeto, esto es, el archivo `chuck.png`.
129
+
130
+---
131
+
132
+```cpp
133
+#include <QImage>
134
+#include <iostream>
135
+
136
+using namespace std;
137
+int main() {
138
+    QImage myImage(“/Users/rarce/Downloads/chuck.png”);
139
+    QRgb    centralPixel;
140
+
141
+    centralPixel = myImage.pixel(myImage.width() / 2, myImage.height() / 2);
142
+
143
+    cout    << hex;
144
+
145
+    cout    << “Los componentes rojo, verde y azul del pixel central son: “
146
+        << qRed(centralPixel) << “, “
147
+        << qGreen(centralPixel) << “, “
148
+        << qBlue(centralPixel) << endl;
149
+    return 0;
150
+}
151
+```
152
+
153
+---
154
+
155
+### Midiendo la similaridad de los colores de los pixeles
156
+
157
+Observa la Figura 4 abajo. Aunque el fondo en la *imagen A* parece uniforme, realmente incluye píxeles de diferentes colores (aunque parecidos).
158
+
159
+---
160
+
161
+![figure5.png](images/figure5.png)
162
+
163
+**Figura 4.** Lo que puede parecer un color *sólido*, realmente no lo es. 
164
+
165
+---
166
+
167
+Por esto, en lugar de solo considerar como parte del fondo sólido los píxeles cuyo color es **exactamente** `0x00FF00`, medimos la *distancia* del valor del color del píxel al valor del color *puro*. Una distancia pequeña significa que el color es *casi* verde puro. La ecuación para la *distancia* es:
168
+
169
+
170
+$$distancia = \sqrt{(P_R-S_R)^2+(P_G-S_G)^2+(P_B-S_B)^2},$$
171
+
172
+donde $$P_R, P_G, P_B$$ son los valores de los componentes rojo, verde y azul del píxel bajo consideración, y $$S_R, S_G, S_B$$ son los valores de los componentes rojo, verde y azul del fondo sólido. En nuestro ejemplo, $$S_R=S_B=0$$ y $$S_G=255$$.
173
+
174
+---
175
+
176
+---
177
+
178
+
179
+##Sesión de laboratorio:
180
+
181
+En el laboratorio de hoy, comenzando con una imagen con un objeto de interés sobre un fondo de color sólido y una imagen para utilizar como fondo, definirás e implantarás una función que cree una tercera imagen compuesta en la cual, a la imagen del objeto de interés se le removerá el color de fondo y aparecerá sobre la imagen para el fondo.
182
+
183
+Estarás trabajando con el archivo `Filter.cpp`. Lo que sigue es un resumen de las variables en este archivo.
184
+
185
+* `objectImage`: referencia a la imagen del objeto de interés y fondo sólido
186
+* `backgroundImage`: referencia a la imagen para el fondo
187
+* `mergedImage`: referencia a la imagen compuesta
188
+* `threshold`: valor umbral usado para comparar las distancias entre el valor del color del píxel de la imagen con el objeto sobre fondo sólido. En el código que se provee, el valor del umbral se lee del valor de la barra deslizable.
189
+* `ghost`: valor Booleano utilizado para aplicar el filtro "fantasma" a los pixeles. 
190
+* `(x, y)`: coordenadas de un pixel de la imagen del objeto sobre fondo sólido. El valor por defecto es `(0,0)`. 
191
+* `(offset_x, offset_y)`: coordenadas de la imagen compuesta en donde la esquina superior izquierda de la imagen del objeto sobre fondo sólido será insertada. El valor por defecto es `(0,0)`. 
192
+
193
+
194
+###Ejercicio 1: Crear imagen compuesta
195
+
196
+####Instrucciones
197
+
198
+1. Carga a QtCreator el proyecto `GreenScreen`  haciendo doble "click" en el archivo `GreenScreen.pro` en el directorio `Documents/eip/Arrays-GreenScreen` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/arrays-greenscreen` para descargar la carpeta `Arrays-GreenScreen` a tu computadora.
199
+ 
200
+2. Compila y corre el programa. El código que te proveemos crea la interfaz de la Figura 5. Los botones  *Select Image* y *Select Background Image* ya han sido programados.
201
+ 
202
+
203
+    ---
204
+
205
+    ![figure6.png](images/figure6.png)
206
+
207
+    **Figura 5.** Interfaz de la aplicación GreenScreen.
208
+
209
+    ---
210
+
211
+3. Marca el botón para cargar una imagen del objeto de interés sobre fondo sólido, luego marca el botón para seleccionar la imagen para el fondo. El directorio con los archivos fuente contiene una carpeta llamada `landscapes`  que contiene imágenes de fondo, y una carpeta llamada `green_background` que contiene imágenes de objetos sobre fondo de color sólido.
212
+
213
+4. Tu primera tarea es completar la función `MergeImages` en el archivo `Filter.cpp`. La función `MergeImages` se invoca cuando el usuario marca el botón `Merge Images` y cuando se desliza la barra. La función `MergeImages` recibe las referencias a la imagen con objeto de interés y fondo sólido, la imagen para el fondo y la imagen compuesta, un valor umbral, las coordenadas `(x,y)` de un píxel de la imagen del objeto sobre fondo sólido, y las coordenadas `(offset_x, offset_y)` de la imagen compuesta. 
214
+
215
+Para este ejercicio puedes ignorar el filtro "fantasma" `ghost` y las coordenadas `(offset_x, offset_y)`, y solo componer la imagen con el objeto de interés en la imagen de fondo, comenzando en la posición `(0,0)`.
216
+
217
+**Algoritmo**
218
+
219
+1. Adquiere el valor del color sólido. El color sólido será el color del píxel en la posición `(x,y)` en la imagen del objeto sobre fondo sólido. El valor por defecto para `(x,y)` es `(0,0)`.
220
+
221
+2. Para todas las posiciones `(i,j)`, adquiere  el valor del color del píxel en la posición `(i,j)` de la imagen con el objeto. Computa la distancia entre el color de la imagen con el objeto y el valor del color sólido. Si la distancia entre el color sólido y el color del píxel de la imagen es mayor que que el valor umbral, cambia el valor del color del píxel en la posición `(i,j)` de la imagen de fondo al valor del color de la imagen con el objeto.
222
+ 
223
+Prueba tu implantación cargando imágenes de objetos e imágenes para el fondo y verificando la imagen compuesta.
224
+
225
+
226
+###Ejercicio 2: Crear imagen compuesta usando filtro `ghost`
227
+
228
+En este ejercicio modificarás el Ejercicio 1 para aplicar el filtro fantasma a cada uno de los píxeles que se compondrán sobre la imagen de fondo en el caso de que la variable `ghost` sea cierta. El filtro fantasma creará el efecto de que el objeto en la imagen compuesta se verá como un "fantasma" sobre la imagen de fondo, como en la Figura 6.
229
+
230
+---
231
+
232
+![figure7.png](images/figure7.png)
233
+
234
+**Figura 6.** Imagen con filtro fantasma. En este ejemplo, el perro en la imagen con el fondo sólido se compone sobre la imagen de fondo utilizando el filtro fantasma.
235
+
236
+---
237
+
238
+El efecto fantasma se consigue promediando el valor del color del píxel del fondo con el valor del color del píxel correspondiente del objeto, en lugar de solo reemplazar el valor del color del píxel del fondo por el del objeto. Calculamos el promedio de cada uno de los componentes (rojo, verde y azul)
239
+
240
+$$N_R=\frac{S_R+B_R}{2}$$
241
+$$N_G=\frac{S_G+B_G}{2}$$
242
+$$N_B=\frac{S_B+B_B}{2},$$
243
+
244
+
245
+en donde $$N_R, N_G, N_B$$ son los componentes rojo, verde y azul del nuevo píxel fantasma,  $$S_R, S_G, S_B$$ son los componentes de la imagen del objeto, y $$B_R, B_G, B_B$$ son los componentes de la imagen de fondo.
246
+
247
+
248
+###Ejercicio 3: Crear imagen compuesta colocando el objeto en una posición específica
249
+
250
+El "widget" que despliega el fondo fue programado para que detecte la posición marcada por el usuario. En este ejercicio programarás la función `MergeImages` para que el objeto sea desplegado en la posición marcada por el usuario en la imagen de fondo, en lugar de ser desplegado en la esquina superior izquierda. Las Figuras 7 y 8 muestran el efecto. Nota los valores de `Selected Coord` bajo la imagen del medio.
251
+
252
+---
253
+
254
+![figure8.png](images/figure8.png)
255
+
256
+
257
+**Figura 7.** En este ejemplo, la imagen del fondo no ha sido marcada y `Selected Coord` tiene `(0,0)` que es su valor por defecto. El perro se inserta en la imagen compuesta con su esquina superior izquierda en el lugar `(0,0)`.
258
+
259
+---
260
+
261
+![figure9.png](images/figure9.png)
262
+
263
+
264
+**Figura 8.** En este ejemplo, la imagen del fondo fue marcada en las coordenadas `(827,593)`. La imagen del perro se inserta en la imagen compuesta con su esquina superior izquierda en la posición `(827,593)`.
265
+
266
+---
267
+
268
+Tu tarea en este ejercicio es la misma que en el Ejercicio 1, pero esta vez debes ajustar la imagen del objeto dentro de la composición con las cantidades especificadas en los parámetros  `x_offset` y `y_offset`. Recuerda tomar en consideración los límites de la imagen compuesta cuando insertes el objeto; el usuario pudiera especificar unos parámetros que se salgan de los límites y el objeto se cortará, como sucede en la Figura 9.
269
+
270
+---
271
+
272
+![figure10.png](images/figure10.png)
273
+
274
+**Figura 9.** En este ejemplo, el usuario seleccionó una posición que asignó valores muy grandes para `x_offset` y `y_offset`; la implementación hizo el ajuste para que parte de la imagen del perro saliera en la imagen compuesta.
275
+
276
+---
277
+
278
+El ejemplo de la Figura 10 muestra cómo se comportará la imagen del objeto al sobreponerla en la imagen que queremos de fondo. Las variables `offset_x, offset_y` representan el punto en la imagen de fondo en el que se colocará la esquina superior izquierda de la imagen del objeto. Nota que si se escoge un punto muy cerca del borde para la composición, parte de la imagen del objeto se sale de los límites de la imagen de fondo. Como hemos visto en la manipulación de arreglos, si se intenta acceder o alterar elementos que estan fuera del rango de tamaño del arreglo, al compilar occurre un error fatal. Lo mismo sucede con las imágenes. 
279
+
280
+Debes asegurarte de que tu implementación toma en cuenta los valores de `offset x` y `offset y`  para que la composición no intente acceder o alterar píxeles fuera del límite de la imagen de fondo. Si intentas acceder o alterar píxeles fuera de esos límites, resulta en un error fatal.
281
+
282
+---
283
+
284
+![figure11.png](images/figure11.png)
285
+
286
+**Figura 10.** Ilustración de la imagen del objeto de interés con píxeles que se salen de los límites de la imagen de fondo. Si no se toma en consideración esta posibilidad en la implementación, ocurrirá un error fatal.
287
+
288
+---
289
+
290
+
291
+Valida tu implantación seleccionando varios valores para el ajuste de "offset" y observando el efecto que tienen en la imagen compuesta. Asegúrate de tratar casos en los que tus valores para `x_offset` y `y_offset` ocasionarían que la imagen fuera cortada como ocurrió en la imagen compuesta de la Figura 9.
292
+
293
+---
294
+
295
+---
296
+
297
+##Entrega
298
+
299
+Utiliza "Entrega" en Moodle para entregar el archivo `filter.cpp` que contiene la función `MergeImages`. Recuerda utilizar buenas prácticas de programación, incluir el nombre de los programadores y documentar tu programa.
300
+
301
+
302
+---
303
+
304
+---
305
+
306
+
307
+## Referencias
308
+
309
+[1] http://en.wikipedia.org/wiki/Green_screen_(disambiguation)
310
+
311
+[2] http://en.wikipedia.org/wiki/Chroma_key
312
+
313
+[3] http://doc.qt.io/qt-4.8/qimage.html.
314
+
315
+---
316
+
317
+---
318
+
319
+---
320
+
321
+[English](#markdown-header-arrays-green-screen) | [Español](#markdown-header-arreglos-pantalla-verde)
322
+
323
+#Arrays - Green Screen
324
+
325
+![main1.png](images/main1.png)
326
+![main2.png](images/main2.png)
327
+![main3.png](images/main3.png)
328
+
329
+
330
+Arrays help us to store and work with groups of data of the same type. The data is stored in consecutive memory spaces which can be accessed by using the name of the array and indexes or subscripts that indicate the position where the data is stored. Repetition structures provide us a simple way of accessing the data within an array. In this laboratory experience, you will be using nested loops to process bi-dimensional arrays and implement the functionality of a green-screen.
331
+
332
+
333
+##Objectives:
334
+
335
+1. Practice accessing and modifying elements in an array.
336
+
337
+2. Use nested loops to implement greens-screen techniques.
338
+
339
+3. Use arithmetic expressions and selection structures to transform pixel colors.
340
+
341
+4. Read pixels from an image and decompose them in their red, green and blue components.
342
+
343
+
344
+##Pre-Lab:
345
+
346
+Before coming to the laboratory you should have:
347
+
348
+1. Reviewed the basic concepts about repetition structures, nested loops, and bi-dimensional arrays.
349
+
350
+2. Understood the methods of the `QImage` class for pixel manipulation.
351
+
352
+3. Studied the concepts and instructions for the laboratory session.
353
+
354
+4. Taken the Pre-Lab quiz that is found in Moodle.
355
+
356
+---
357
+
358
+---
359
+
360
+## Green-screen technology
361
+
362
+In this laboratory experience the student will be exposed to the basics of the green screen technology used in newscasting, motion pictures, video games, and others.  Green screen compositing, or more generally chroma key compositing, is a technique for combining two still images or video frames[1]. Chroma key compositing, or chroma keying, is a special effects / post-production technique for compositing (layering) two images or video streams together based on color hues (range)[2]. Chroma keying can be done with backgrounds of any color that are uniform and distinct, but green and blue backgrounds are more commonly used because they differ most distinctly in hue from most human skin colors.
363
+
364
+With this laboratory we provide a simple GUI that allows the user to load an image with any solid background (although green or blue are preferred), and a background image. Your task is to implement a function that creates a third, merged image, in which the image with the solid background appears over the background image (with the solid background removed). Figure 1 shows an example of the expected results.
365
+
366
+---
367
+
368
+![figure1.png](images/figure1.png)
369
+
370
+Figure 1: Example of the expected results. The object of interest is the hand carrying the sunglasses.
371
+
372
+---
373
+
374
+For illustration purposes, let's call the image with the solid background *image A* and let's say that the solid color in the background has an RGB `0x00ff00` (pure green). We will refer to the image with the interesting background as *image B*. Let's also assume that both images are the same size (width and height). 
375
+
376
+To produce the merged image (*image C*), we could start by completely copying *image B* to *image *C*. Then, to insert only the object of interest into the merged image we could traverse *image A* pixel by pixel. We would compare the color of each pixel *p* in *image A* to the color `0x00FF00`, if they are *similar* we do nothing (because it means that this pixel is part of the solid color background). If the color of *p* is not *similar* to `0x00FF00`, we modify the corresponding pixel in *image C*, copying the color of the object's pixel to the merged image.
377
+
378
+---
379
+
380
+![figure2.png](images/figure2.png)
381
+
382
+**Figure 2** - Illustration of how the algorithm decides which pixels to include from *image A* into *image C*.
383
+
384
+---
385
+
386
+---
387
+
388
+
389
+###Pixels
390
+
391
+The smallest element in an image is called a *pixel*. This unit consists of a single color. Since each color is a combination of tones for the primary red, green and blue colors, it is coded as an unsigned integer whose bytes represent the tones of red, green and blue of the pixel (Figure 3). This combination is called the color's *RGB* which is an acronym for "Red-Green-Blue". For example, a pure red pixel has an RGB representation of `0x00ff0000`, while a white pixel has an RGB representation of `0x00FFFFFF` (since the color white is a combination of tones of red, green and blue in all of their intensity).
392
+
393
+---
394
+
395
+![figure3.png](images/figure3.png)
396
+
397
+**Figure 3.** Bit distribution for the tones of red, green and blue in an RGB representation. Each tone can have values between 0x00 (the eight bits in 0) and (0xFF (the 8 bits in 1).
398
+
399
+---
400
+
401
+`Qt` uses the `QRgb` type to represent `RGB` values. Using certain functions that are described below we can obtains the red, green and blue components of the `QRgb` value of the pixel and manipulate the images.
402
+
403
+###Library
404
+
405
+In today's laboratory experience you will use the `QImage` class. This class permits access to the data in the pixels of an image to manipulate it. The documentation for the `QImage` class can be found in http://doc.qt.io/qt-4.8/qimage.html.
406
+
407
+The code provided in this project contains the following objects of the `QImage` class:
408
+
409
+* `originalImage`   // contains the information of the original image that you will edit
410
+*  `editedImage`  // will contain the edited image
411
+
412
+The objects of the `QImage` class have the following methods that will be useful for today's laboratory experience:
413
+
414
+* `width()`      // returns the integer value for the image's width
415
+* `height()`      // returns the integer value for the image's height
416
+* `pixel(i, j)`       // returns the `QRgb` for the pixel in position `(i,j)`
417
+* `setPixel(i,j, pixel)`   // modifies the value for the pixel in position `(i,j)` to the value of pixel `QRgb`
418
+
419
+The following functions are useful to work with data of type `QRgb`:
420
+
421
+* `qRed(pixel)`   // returns the tone for the pixel's red color
422
+* `qGreen(pixel)` // returns the tone for the pixel's green color
423
+* `qBlue(pixel)`  // returns the tone for the pixel's blue color
424
+* `qRgb(int red, int green, int blue)` // returns the `QRgb` pixel composed of the red, green and blue values received.
425
+
426
+
427
+####Examples:
428
+
429
+1. `QRgb myRgb = qRgb(0xff, 0x00, 0xff);`: Assigns the value `0xff00ff` to `myRgb` which represents the color ![figure2.jpg](images/figure4.jpg)
430
+
431
+    Notice that the value `0xff00ff` represents the values `0xff`, `0x0`, and `0xff`, that correspond to the red, green and blue components in `myRgb`.
432
+
433
+2. If the following `4 x 4` image of pixels represents the object `originalImage`,
434
+
435
+ ![ejemplo.png](images/ejemplo.png)
436
+
437
+then `originalImage.pixel(2,1)` returns the `rgb` value that represents the color blue ( `0x0000ff`).
438
+
439
+3. The following instruction assigns the color red to the pixel in position `(2,3)` in the edited image:
440
+
441
+`editedImage.setPixel(2,3,qRgb(0xff,0x00,0x00));`.
442
+
443
+4. The following instruction assigns to `greenContent` the value of the green tone that is contained in the pixel `(1,1)` of `originalImage`:
444
+
445
+    `int greenContent = qGreen(originalImage.pixel(1,1));`.
446
+
447
+5. The following program creates an object of the `QImage` class and prints the red, green and blue components of the pixel in the center of the image. The image used is the one specified within the parenthesis during the creation of the object, that is, the file `chuck.png`
448
+
449
+---
450
+
451
+```cpp
452
+#include <QImage>
453
+#include <iostream>
454
+
455
+using namespace std;
456
+int main() {
457
+    QImage myImage(“/Users/rarce/Downloads/chuck.png”);
458
+    QRgb    centralPixel;
459
+
460
+    centralPixel = myImage.pixel(myImage.width() / 2, myImage.height() / 2);
461
+
462
+    cout    << hex;
463
+
464
+    cout    << “The red, green and blue components of the middle pixel are: “
465
+        << qRed(centralPixel) << “, “
466
+        << qGreen(centralPixel) << “, “
467
+        << qBlue(centralPixel) << endl;
468
+    return 0;
469
+}
470
+```
471
+
472
+---
473
+
474
+
475
+
476
+### Measuring similarity of pixel colors
477
+
478
+Look at Figure 4, although the background in *image A* looks uniform, it really includes pixels of diverse (although similar) colors.
479
+
480
+---
481
+
482
+![figure5.png](images/figure5.png)
483
+
484
+**Figure 4** - What may seem as a *solid* color, really is not. Thus, we use the color *distance*.
485
+
486
+---
487
+
488
+Instead of only considering as part of the solid background the pixels whose color is **exactly** `0x00FF00`, we measure a color's *distance* from the *pure* color. A small *distance* means that the color is *almost* a pure green. A large *distance* means that the color is very different from green. The equation for *distance* is:
489
+
490
+$$distance = \sqrt{(P_R-S_R)^2+(P_G-S_G)^2+(P_B-S_B)^2},$$
491
+
492
+where $$P_R$$, $$P_G$$, and $$P_B$$ are the red, green and blue components of the pixel being considered.  $$S_R$$, $$S_G$$, and $$S_B$$ are the components of the solid background, e.g. in our example $$S_R=S_B=0$$ y $$S_G=255$$.
493
+
494
+---
495
+
496
+---
497
+
498
+##Laboratory Session
499
+
500
+In this laboratory experience, starting with an image with an object of interest over a solid color background and an image to use as a background, you will define and implement a function that creates a third merged image where the image with the object of interest will have its background color removed and will appear over the image chosen to be the background.
501
+
502
+You will be working with the `Filter.cpp` file. The following is a review of the variables in this file:
503
+
504
+* objectImage: reference to the object image with the solid background
505
+* backgroundImage: reference to the background image object
506
+* mergedImage: reference to the merged image
507
+* threshold: is a theshold value used to compare the distances between the object pixel and the solid background pixel. In the provided code, the threshold value is read from the slideBar.
508
+* ghost: is a boolean value used to apply ghost filter to pixels.
509
+* (x, y): contains the coordinate of the pixel whose color will be used as solid background. The default value is (0,0).
510
+* (offset_x, offset_y): the coordinate of the merged image where the upper-left corner of the objectImage should be inserted. The default value is (0,0).
511
+
512
+### Exercise 1: Create a composite image
513
+
514
+####Instructions
515
+
516
+1. Load the Qt project called `GreenScreenLab` by double-clicking on the `GreenScreenLab.pro` file in the `Documents/eip/Arrays-GreenScreen` folder of your computer. You may also go to `http://bitbucket.org/eip-uprrp/arrays-greenscreen` to download the `Arrays-GreenScreen` folder to your computer.
517
+
518
+2. Build and run the program. The provided code creates the interface shown in Figure 5. The buttons  *Select Image* and *Select Background Image* have already been programmed to perform their actions.
519
+
520
+    ---
521
+
522
+    ![figure6.png](images/figure6.png)
523
+
524
+    **Figure 5.**Interface for the green screen application.
525
+
526
+    ---
527
+
528
+3. Click the *Select Image* button to load the image that contains the solid background, the click *Select Background Image* to load the image that contains the interesting background. The folders called `green_background` and `landscapes` contain some images that are suitable as the first and second images.  
529
+
530
+
531
+4. Your first task is to complete the function `MergeImages` in file `Filter.cpp`.`MergeImages` is the function that is called when the user presses the button captioned `Merge Images` or when he slides the slide bar. The function `MergeImages` receives the image with the solid background, the background image, a reference to the merged image, a threshold value, and the coordinates `(x,y)` of the pixel from which we will extract the sample *green* background color, and the coordinates `(offset_x, offset_y)` from the merged image.
532
+
533
+For this first exercise you can ignore the following parameters: ghost, x_offset, y_offset. Your implementation should place the `objectImage` into the `mergedImage` starting at position (0,0).
534
+
535
+**The algorithm**
536
+
537
+1. Acquire the value of the solid color. The solid color will be the color of the pixel in the coordinate `(x,y)` of the object image with the solid background. The default value for `(x,y)` is `(0,0)`.
538
+
539
+2. For every position `(i,j)`, read the color of the corresponding pixel in the objectImage. Compute the distance of the pixel colors to the solid color. If the distance between the solid color and the color of the pixel of the image is greater than the threshold, set the corresponding `(i,j)` pixel in the merged image to the objectImage pixel color. 
540
+
541
+Test your implementation by loading object and background images and verifying the merged image.
542
+
543
+## Exercise 2: Creating a composite image using a ghost filter
544
+
545
+In this exercise you will modify Exercise 1 to apply a ghost filter to each of the pixels that will be composed over the background image (if the `ghost` variable is true). The filter creates a ghost like effect on the objects composed over the background image, as in Figure 6.
546
+
547
+
548
+---
549
+
550
+![figure7.png](images/figure7.png)
551
+
552
+**Figure 6** - In this example, the dog in the image with the solid background is composed in the background image with the ghost filter. 
553
+
554
+---
555
+
556
+The ghost effect is achieved by *averaging* the background color with the object's color (instead of simply *replacing* the background with the object's color). The average is performed for each of the components (red, green and blue).  
557
+
558
+$$N_R=\frac{S_R+B_R}{2}$$
559
+$$N_G=\frac{S_G+B_G}{2}$$
560
+$$N_B=\frac{S_B+B_B}{2},$$
561
+
562
+
563
+where $$N_R$$, $$N_G$$, and $$N_B$$ are the red, green and blue components of the new ghost pixel. $$S_R$$, $$S_G$$, and $$S_B$$ are the components of the object image. $$B_R$$, $$B_G$$, $$B_B$$ are the components of the background image. 
564
+
565
+## Exercise 3: Create a composite image placing the object in a specified position
566
+
567
+The widget that displays the background has been programmed to register the position where the user clicks. In this exercise you will program the `MergeImages` function so that the position that user clicks in the background image is used as the *top left* corner where the *object* image will be displayed in the merged image. The following figures illustrates the effect. Note the *Selected Coord* values under the images.
568
+
569
+
570
+---
571
+
572
+![figure8.png](images/figure8.png)
573
+
574
+
575
+**Figure 7.** In this example, the background image has not been clicked. Thus the "Selected Coord" is at its default value of (0,0).  The dog image is inserted with its top-left corner at (0,0) in the merged image.
576
+
577
+---
578
+
579
+![figure9.png](images/figure9.png)
580
+
581
+
582
+**Figure 8.** In this example, the background image has been clicked at coordinate `(827,593)`. The dog image is inserted with its top-left corner at `(827,593)` in the merged image.
583
+
584
+---
585
+
586
+
587
+In this exercise your task will be the same as in Exercise 1, but this time you will need to offset the *object* image inside the *merged* image by the amount specified in the `x_offset` and `y_offset` parameters. Please take into consideration the merged image boundaries when you are inserting the object image. The user may specify an offset where the boundaries are exceeded and the object will be cut, as in Figure 9.  
588
+
589
+---
590
+
591
+![figure10.png](images/figure10.png)
592
+
593
+**Figure 9**. In this example, the user selected a position that assigned values that are too large for `x_offset` and `y_offset`; the implementation made the adjustment so part of the dog appeared in the merged image.
594
+
595
+---
596
+
597
+The example in Figure 10 shows how the object image will behave when merging it with the background image. The `x_offset` and `y_offset` variables represent the point in the background image where the upper left corner of the object image will be placed. Notice that if a point too close to the image border is chosen, part of the object image will be outside of the limits of the background image. As we have seen when manipulating arrays, if one tries to access or alter elements that are outside of the size range of the array, we get a fatal compilation error. The same thing happens with the images.
598
+
599
+You should make sure that your implementation takes into account the `x_offset` and `y_offset` values so the composition does not try to access or alter pixels outside of the limits of the background image. If you try to access or alter pixels outside of these limits, it will result in a fatal error.
600
+
601
+---
602
+
603
+![figure11.png](images/figure11.png)
604
+
605
+**Figure 10.** Illustration of the object image with pixels that are outside of the background image limits. If the possibility of this happening is not taken into account in the implementation, there will be a fatal error.
606
+
607
+---
608
+
609
+
610
+Validate your implementation by choosing several offsets and observing the merged image. Be sure to try cases in which you choose x and y offsets that result in the object being cropped in the merged image (as in Figure 9).
611
+
612
+
613
+---
614
+
615
+---
616
+
617
+### Deliverables
618
+
619
+
620
+Use "Deliverables" in Moodle to upload the `filter.cpp` file that contains the `MergeImages` function. Remember to use good programming techniques, include the names of the programmers involved, and to document your program.
621
+
622
+---
623
+
624
+---
625
+
626
+### References
627
+
628
+[1] http://en.wikipedia.org/wiki/Green_screen_(disambiguation
629
+
630
+[2] http://en.wikipedia.org/wiki/Chroma_key
631
+
632
+[3] http://doc.qt.io/qt-4.8/qimage.html

+ 1574
- 0
arrays-GreenScreen.html
File diff suppressed because it is too large
View File


+ 636
- 0
arrays-GreenScreen.md View File

@@ -0,0 +1,636 @@
1
+[English](#markdown-header-arrays-green-screen) | [Español](#markdown-header-arreglos-pantalla-verde)
2
+
3
+#Arreglos - Pantalla Verde
4
+
5
+![main1.png](images/main1.png)
6
+![main2.png](images/main2.png)
7
+![main3.png](images/main3.png)
8
+
9
+Los arreglos de datos (*arrays*) nos facilitan guardar y trabajar con grupos de datos del mismo tipo. Los datos se guardan en espacios de memoria consecutivos a los que se puede acceder utilizando el nombre del arreglo e índices o suscritos que indican la posición en que se encuentra el dato. Las estructuras de repetición nos proveen una manera simple de acceder a los datos de un arreglo. En la experiencia de laboratorio de hoy practicarás el uso de ciclos anidados en la manipulación de arreglos bi-dimensionales usando técnicas de "pantalla verde".
10
+
11
+
12
+##Objetivos:
13
+
14
+1. Practicar el acceso y manipulación de  datos en un arreglo.
15
+
16
+2. Aplicar ciclos anidados para implementar técnicas de "pantalla verde".
17
+
18
+3. Utilizar expresiones aritméticas y estructuras de selección para transformar colores de píxeles.
19
+
20
+4. Acceder píxeles en una imagen y descomponerlos en sus componentes rojo, azul y verde.
21
+
22
+
23
+##Pre-Lab:
24
+
25
+Antes de llegar al laboratorio debes:
26
+
27
+1. Haber repasado los conceptos básicos relacionados a estructuras de repetición, ciclos anidados y arreglos bi-dimensionales.
28
+
29
+2. Conocer los métodos básicos de `QImage` para manipular los pixeles de las imágenes. 
30
+
31
+3. Haber estudiado los conceptos e instrucciones para la sesión de laboratorio.
32
+
33
+4. Haber tomado el quiz Pre-Lab que se encuentra en Moodle.
34
+
35
+---
36
+
37
+---
38
+
39
+##Tecnología de pantalla verde ("Green Screen")
40
+
41
+En esta experiencia de laboratorio, aprenderás los conceptos y destrezas básicas de la tecnología de pantalla verde que se usa en boletines informativos de televisión, películas, juegos de video y otros. La composición de pantalla verde, o composición cromática, es una técnica que se usa para combinar dos imágenes o cuadros de video [1]. Esta técnica de post-producción  crea efectos especiales al componer  dos imágenes o transmisiones de video sustituyendo el área de un color sólido por otra imágen [2]. La composición cromática se puede hacer con imágenes de objetos sobre fondos de cualquier color que sean uniformes y diferentes a los de la imagen. Los fondos azules y verdes son los que se usan con más frecuencia porque se distinguen con más facilidad de los tonos de la mayoría de los colores de piel humanos.
42
+
43
+Para esta experiencia de laboratorio te proveemos un interfaz gráfico (GUI) simple que permite al usuario cargar una imagen con un objeto sobre un fondo de color sólido (preferiblemente azul o verde) y una imagen para sustituir el fondo. Tu tarea es crear e implementar una función que cree una tercera imagen compuesta en la cual, a la imagen del objeto  con el fondo de color sólido se le removerá el color de fondo y el objeto aparecerá sobre la imagen que será el nuevo fondo. La Figura 1 muestra un ejemplo de los resultados esperados.
44
+
45
+---
46
+
47
+![figure1.png](images/figure1.png)
48
+
49
+**Figura 1.** Ejemplo de los resultados esperados. El objeto de interés es la mano con las gafas.
50
+
51
+---
52
+
53
+Con el propósito de ilustrar el procedimiento, llamemos la imagen del objeto con el fondo de color sólido  *imagen A*, y supongamos que el color sólido en el fondo tiene un "RGB" `0x00ff00` (verde puro). Llamemos *imagen B* a la imagen que usaremos para el fondo, un fondo que resulte interesante. Para este ejemplo, supongamos también que los tamaños de ambas imágenes son iguales (mismo ancho y alto).
54
+
55
+Para producir la imagen compuesta (*imagen C*), podríamos comenzar copiando toda la *imagen B* que usaremos de fondo a la *imagen C*. Luego, para insertar solo el objeto que nos interesa en la imagen compuesta podemos recorrer la *imagen A* píxel por píxel. Compararíamos el color de cada píxel *p* en la *imagen A* con el color de fondo `0x00ff00`. Si son *similares*, el píxel de la *imagen A* corresponde al color sólido de fondo y dejamos el píxel de la *imagen C* como está (el fondo nuevo). Si el color de *p* no es *similar* a `0x00ff00`, modificamos el píxel correspondiente en la *imagen C*, copiando el color del píxel del objeto a la imagen compuesta. Esto se ilustra en la Figura 2.
56
+
57
+---
58
+
59
+![figure2.png](images/figure2.png)
60
+
61
+**Figura 2.** Ilustración de cómo el algoritmo decide cuáles píxeles de la *imagen A* incluir en la *imagen C*.
62
+
63
+---
64
+
65
+---
66
+
67
+##Píxeles
68
+
69
+Al elemento más pequeño de una imagen se le llama un *píxel*. Esta unidad consiste de un solo color. Como cada color es una combinación de tonalidades de los colores primarios rojo, verde y azul,   se codifica como un entero sin signo cuyos bytes  representan los tonos de rojo, verde y azul del pixel  (Figura 3). A esta combinación se le llama el *RGB* del color por las siglas de "Red-Green-Blue". Por ejemplo un píxel de color rojo (puro) tiene una representación RGB `0x00ff0000`, mientras que un píxel de color blanco tiene una representación RGB de `0x00FFFFFF` (ya que el color blanco es la combinación de los tonos rojo, verde y azul en toda su intensidad).
70
+
71
+---
72
+
73
+![figure3.png](images/figure3.png)
74
+
75
+**Figura 3.** Distribución de bits para las tonalidades de rojo, verde y azul dentro de la representación RGB.  Cada tonalidad puede tener valores entre 0x00 (los ocho bits en 0) y 0xFF (los 8 bits en 1). 
76
+
77
+---
78
+
79
+En `Qt` se utiliza el tipo `QRgb` para representar valores `RGB`.  Utilizando ciertas funciones que describimos abajo podemos obtener los componentes rojo, verde y azul del valor `QRgb` del píxel y así manipular imágenes.
80
+
81
+###Biblioteca
82
+
83
+La experiencia de laboratorio de hoy utilizará la clase `QImage`. Esta clase permite acceder a los datos de los pixeles de una imagen para poder manipularla. La documentación de la clase `QImage` se encuentra en http://doc.qt.io/qt-4.8/qimage.html.
84
+
85
+El código que te proveemos contiene los siguiente objetos de la clase `QImage`:
86
+
87
+* `originalImage`   // contiene la información de la imagen original que vas a editar
88
+*  `editedImage`  // contendrá la imagen editada
89
+
90
+Los objetos de clase `QImage` tienen los siguiente métodos que serán útiles para la experiencia de laboratorio de hoy:
91
+
92
+
93
+* `width()`      // devuelve el valor entero del ancho de la imagen
94
+* `height()`      // devuelve el valor entero de la altura de la imagen
95
+* `pixel(i, j)`       // devuelve el `QRgb` del píxel en la posición `(i,j)`
96
+* `setPixel(i,j, pixel)`   // modifica el valor del píxel en la posición `(i, j)` al valor píxel `QRgb`
97
+
98
+Las siguientes funciones son útiles para trabajar con datos de tipo `QRgb`:
99
+
100
+
101
+* `qRed(pixel)`   // devuelve el tono del color rojo del píxel
102
+* `qGreen(pixel)` // devuelve el tono del color verde del píxel
103
+* `qBlue(pixel)`  // devuelve el tono del color azul del píxel
104
+* `qRgb(int red, int green, int blue)` // devuelve un píxel `QRgb` compuesto de los valores de rojo, verde y azul recibidos.
105
+
106
+
107
+####Ejemplos:
108
+
109
+1. `QRgb myRgb = qRgb(0xff, 0x00, 0xff);`: Asigna a `myRgb` el valor `0xff00ff` que representa el color ![figure4.png](images/figure4.png)
110
+
111
+    Nota que el valor `0xff00ff` representa los valores `0xff`, `0x0`, `0xff`, que corresponden a los componentes rojo, verde y azul de `myRgb`.
112
+
113
+2. Si la siguiente imagen `4 x 4` de píxeles representa el objeto `originalImage`,
114
+
115
+    ![ejemplo.png](images/ejemplo.png)
116
+
117
+  entonces `originalImage.pixel(2,1)` devuelve un valor `rgb` que representa el color azul (`0x0000ff`).
118
+
119
+3. La siguiente instrucción asigna el color rojo al píxel en posición `(2,3)` en la imagen editada:
120
+
121
+  `editedImage.setPixel(2,3,qRgb(0xff,0x00,0x00));`.
122
+
123
+4. La siguiente instrucción le asigna a `greenContent` el valor del tono de verde que contiene el pixel `(1,1)` de  `originalImage`:
124
+
125
+  `int greenContent = qGreen(originalImage.pixel(1,1));`.
126
+
127
+
128
+5. El siguiente programa crea un objeto de clase `QImage` e imprime los componentes rojo, verde y azul del pixel en el centro de la imagen. La imagen utilizada es la que se especifica dentro del paréntesis durante la creación del objeto, esto es, el archivo `chuck.png`.
129
+
130
+---
131
+
132
+```cpp
133
+#include <QImage>
134
+#include <iostream>
135
+
136
+using namespace std;
137
+int main() {
138
+    QImage myImage(“/Users/rarce/Downloads/chuck.png”);
139
+    QRgb    centralPixel;
140
+
141
+    centralPixel = myImage.pixel(myImage.width() / 2, myImage.height() / 2);
142
+
143
+    cout    << hex;
144
+
145
+    cout    << “Los componentes rojo, verde y azul del pixel central son: “
146
+        << qRed(centralPixel) << “, “
147
+        << qGreen(centralPixel) << “, “
148
+        << qBlue(centralPixel) << endl;
149
+    return 0;
150
+}
151
+```
152
+
153
+---
154
+
155
+### Midiendo la similaridad de los colores de los pixeles
156
+
157
+Observa la Figura 4 abajo. Aunque el fondo en la *imagen A* parece uniforme, realmente incluye píxeles de diferentes colores (aunque parecidos).
158
+
159
+---
160
+
161
+![figure5.png](images/figure5.png)
162
+
163
+**Figura 4.** Lo que puede parecer un color *sólido*, realmente no lo es. 
164
+
165
+---
166
+
167
+Por esto, en lugar de solo considerar como parte del fondo sólido los píxeles cuyo color es **exactamente** `0x00FF00`, medimos la *distancia* del valor del color del píxel al valor del color *puro*. Una distancia pequeña significa que el color es *casi* verde puro. La ecuación para la *distancia* es:
168
+
169
+
170
+$$distancia = \sqrt{(P_R-S_R)^2+(P_G-S_G)^2+(P_B-S_B)^2},$$
171
+
172
+donde $$P_R, P_G, P_B$$ son los valores de los componentes rojo, verde y azul del píxel bajo consideración, y $$S_R, S_G, S_B$$ son los valores de los componentes rojo, verde y azul del fondo sólido. En nuestro ejemplo, $$S_R=S_B=0$$ y $$S_G=255$$.
173
+
174
+---
175
+
176
+---
177
+
178
+
179
+##Sesión de laboratorio:
180
+
181
+En el laboratorio de hoy, comenzando con una imagen con un objeto de interés sobre un fondo de color sólido y una imagen para utilizar como fondo, definirás e implantarás una función que cree una tercera imagen compuesta en la cual, a la imagen del objeto de interés se le removerá el color de fondo y aparecerá sobre la imagen para el fondo.
182
+
183
+Estarás trabajando con el archivo `Filter.cpp`. Lo que sigue es un resumen de las variables en este archivo.
184
+
185
+* `objectImage`: referencia a la imagen del objeto de interés y fondo sólido
186
+* `backgroundImage`: referencia a la imagen para el fondo
187
+* `mergedImage`: referencia a la imagen compuesta
188
+* `threshold`: valor umbral usado para comparar las distancias entre el valor del color del píxel de la imagen con el objeto sobre fondo sólido. En el código que se provee, el valor del umbral se lee del valor de la barra deslizable.
189
+* `ghost`: valor Booleano utilizado para aplicar el filtro "fantasma" a los pixeles. 
190
+* `(x, y)`: coordenadas de un pixel de la imagen del objeto sobre fondo sólido. El valor por defecto es `(0,0)`. 
191
+* `(offset_x, offset_y)`: coordenadas de la imagen compuesta en donde la esquina superior izquierda de la imagen del objeto sobre fondo sólido será insertada. El valor por defecto es `(0,0)`. 
192
+
193
+
194
+###Ejercicio 1: Crear imagen compuesta
195
+
196
+####Instrucciones
197
+
198
+1. Carga a QtCreator el proyecto `GreenScreen`  haciendo doble "click" en el archivo `GreenScreen.pro` en el directorio `Documents/eip/Arrays-GreenScreen` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/arrays-greenscreen` para descargar la carpeta `Arrays-GreenScreen` a tu computadora.
199
+ 
200
+2. Compila y corre el programa. El código que te proveemos crea la interfaz de la Figura 5. Los botones  *Select Image* y *Select Background Image* ya han sido programados.
201
+ 
202
+
203
+    ---
204
+
205
+    ![figure6.png](images/figure6.png)
206
+
207
+    **Figura 5.** Interfaz de la aplicación GreenScreen.
208
+
209
+    ---
210
+
211
+3. Marca el botón para cargar una imagen del objeto de interés sobre fondo sólido, luego marca el botón para seleccionar la imagen para el fondo. El directorio con los archivos fuente contiene una carpeta llamada `landscapes`  que contiene imágenes de fondo, y una carpeta llamada `green_background` que contiene imágenes de objetos sobre fondo de color sólido.
212
+
213
+4. Tu primera tarea es completar la función `MergeImages` en el archivo `Filter.cpp`. La función `MergeImages` se invoca cuando el usuario marca el botón `Merge Images` y cuando se desliza la barra. La función `MergeImages` recibe las referencias a la imagen con objeto de interés y fondo sólido, la imagen para el fondo y la imagen compuesta, un valor umbral, las coordenadas `(x,y)` de un píxel de la imagen del objeto sobre fondo sólido, y las coordenadas `(offset_x, offset_y)` de la imagen compuesta. 
214
+
215
+Para este ejercicio puedes ignorar el filtro "fantasma" `ghost` y las coordenadas `(offset_x, offset_y)`, y solo componer la imagen con el objeto de interés en la imagen de fondo, comenzando en la posición `(0,0)`.
216
+
217
+**Algoritmo**
218
+
219
+1. Adquiere el valor del color sólido. El color sólido será el color del píxel en la posición `(x,y)` en la imagen del objeto sobre fondo sólido. El valor por defecto para `(x,y)` es `(0,0)`.
220
+
221
+2. Para todas las posiciones `(i,j)`, adquiere  el valor del color del píxel en la posición `(i,j)` de la imagen con el objeto. Computa la distancia entre el color de la imagen con el objeto y el valor del color sólido. Si la distancia entre el color sólido y el color del píxel de la imagen es mayor que que el valor umbral, cambia el valor del color del píxel en la posición `(i,j)` de la imagen de fondo al valor del color de la imagen con el objeto.
222
+ 
223
+Prueba tu implantación cargando imágenes de objetos e imágenes para el fondo y verificando la imagen compuesta.
224
+
225
+
226
+###Ejercicio 2: Crear imagen compuesta usando filtro `ghost`
227
+
228
+En este ejercicio modificarás el Ejercicio 1 para aplicar el filtro fantasma a cada uno de los píxeles que se compondrán sobre la imagen de fondo en el caso de que la variable `ghost` sea cierta. El filtro fantasma creará el efecto de que el objeto en la imagen compuesta se verá como un "fantasma" sobre la imagen de fondo, como en la Figura 6.
229
+
230
+---
231
+
232
+![figure7.png](images/figure7.png)
233
+
234
+**Figura 6.** Imagen con filtro fantasma. En este ejemplo, el perro en la imagen con el fondo sólido se compone sobre la imagen de fondo utilizando el filtro fantasma.
235
+
236
+---
237
+
238
+El efecto fantasma se consigue promediando el valor del color del píxel del fondo con el valor del color del píxel correspondiente del objeto, en lugar de solo reemplazar el valor del color del píxel del fondo por el del objeto. Calculamos el promedio de cada uno de los componentes (rojo, verde y azul)
239
+
240
+$$N_R=\frac{S_R+B_R}{2}$$
241
+$$N_G=\frac{S_G+B_G}{2}$$
242
+$$N_B=\frac{S_B+B_B}{2},$$
243
+
244
+
245
+en donde $$N_R, N_G, N_B$$ son los componentes rojo, verde y azul del nuevo píxel fantasma,  $$S_R, S_G, S_B$$ son los componentes de la imagen del objeto, y $$B_R, B_G, B_B$$ son los componentes de la imagen de fondo.
246
+
247
+
248
+###Ejercicio 3: Crear imagen compuesta colocando el objeto en una posición específica
249
+
250
+El "widget" que despliega el fondo fue programado para que detecte la posición marcada por el usuario. En este ejercicio programarás la función `MergeImages` para que el objeto sea desplegado en la posición marcada por el usuario en la imagen de fondo, en lugar de ser desplegado en la esquina superior izquierda. Las Figuras 7 y 8 muestran el efecto. Nota los valores de `Selected Coord` bajo la imagen del medio.
251
+
252
+---
253
+
254
+![figure8.png](images/figure8.png)
255
+
256
+
257
+**Figura 7.** En este ejemplo, la imagen del fondo no ha sido marcada y `Selected Coord` tiene `(0,0)` que es su valor por defecto. El perro se inserta en la imagen compuesta con su esquina superior izquierda en el lugar `(0,0)`.
258
+
259
+---
260
+
261
+![figure9.png](images/figure9.png)
262
+
263
+
264
+**Figura 8.** En este ejemplo, la imagen del fondo fue marcada en las coordenadas `(827,593)`. La imagen del perro se inserta en la imagen compuesta con su esquina superior izquierda en la posición `(827,593)`.
265
+
266
+---
267
+
268
+Tu tarea en este ejercicio es la misma que en el Ejercicio 1, pero esta vez debes ajustar la imagen del objeto dentro de la composición con las cantidades especificadas en los parámetros  `x_offset` y `y_offset`. Recuerda tomar en consideración los límites de la imagen compuesta cuando insertes el objeto; el usuario pudiera especificar unos parámetros que se salgan de los límites y el objeto se cortará, como sucede en la Figura 9.
269
+
270
+---
271
+
272
+![figure10.png](images/figure10.png)
273
+
274
+**Figura 9.** En este ejemplo, el usuario seleccionó una posición que asignó valores muy grandes para `x_offset` y `y_offset`; la implementación hizo el ajuste para que parte de la imagen del perro saliera en la imagen compuesta.
275
+
276
+---
277
+
278
+El ejemplo de la Figura 10 muestra cómo se comportará la imagen del objeto al sobreponerla en la imagen que queremos de fondo. Las variables `offset_x, offset_y` representan el punto en la imagen de fondo en el que se colocará la esquina superior izquierda de la imagen del objeto. Nota que si se escoge un punto muy cerca del borde para la composición, parte de la imagen del objeto se sale de los límites de la imagen de fondo. Como hemos visto en la manipulación de arreglos, si se intenta acceder o alterar elementos que estan fuera del rango de tamaño del arreglo, al compilar occurre un error fatal. Lo mismo sucede con las imágenes. 
279
+
280
+Debes asegurarte de que tu implementación toma en cuenta los valores de `offset x` y `offset y`  para que la composición no intente acceder o alterar píxeles fuera del límite de la imagen de fondo. Si intentas acceder o alterar píxeles fuera de esos límites, resulta en un error fatal.
281
+
282
+---
283
+
284
+![figure11.png](images/figure11.png)
285
+
286
+**Figura 10.** Ilustración de la imagen del objeto de interés con píxeles que se salen de los límites de la imagen de fondo. Si no se toma en consideración esta posibilidad en la implementación, ocurrirá un error fatal.
287
+
288
+---
289
+
290
+
291
+Valida tu implantación seleccionando varios valores para el ajuste de "offset" y observando el efecto que tienen en la imagen compuesta. Asegúrate de tratar casos en los que tus valores para `x_offset` y `y_offset` ocasionarían que la imagen fuera cortada como ocurrió en la imagen compuesta de la Figura 9.
292
+
293
+---
294
+
295
+---
296
+
297
+##Entrega
298
+
299
+Utiliza "Entrega" en Moodle para entregar el archivo `filter.cpp` que contiene la función `MergeImages`. Recuerda utilizar buenas prácticas de programación, incluir el nombre de los programadores y documentar tu programa.
300
+
301
+
302
+---
303
+
304
+---
305
+
306
+
307
+## Referencias
308
+
309
+[1] http://en.wikipedia.org/wiki/Green_screen_(disambiguation)
310
+
311
+[2] http://en.wikipedia.org/wiki/Chroma_key
312
+
313
+[3] http://doc.qt.io/qt-4.8/qimage.html.
314
+
315
+---
316
+
317
+---
318
+
319
+---
320
+
321
+[English](#markdown-header-arrays-green-screen) | [Español](#markdown-header-arreglos-pantalla-verde)
322
+
323
+#Arrays - Green Screen
324
+
325
+![main1.png](images/main1.png)
326
+![main2.png](images/main2.png)
327
+![main3.png](images/main3.png)
328
+
329
+
330
+Arrays help us to store and work with groups of data of the same type. The data is stored in consecutive memory spaces which can be accessed by using the name of the array and indexes or subscripts that indicate the position where the data is stored. Repetition structures provide us a simple way of accessing the data within an array. In this laboratory experience, you will be using nested loops to process bi-dimensional arrays and implement the functionality of a green-screen.
331
+
332
+
333
+##Objectives:
334
+
335
+1. Practice accessing and modifying elements in an array.
336
+
337
+2. Use nested loops to implement greens-screen techniques.
338
+
339
+3. Use arithmetic expressions and selection structures to transform pixel colors.
340
+
341
+4. Read pixels from an image and decompose them in their red, green and blue components.
342
+
343
+
344
+##Pre-Lab:
345
+
346
+Before coming to the laboratory you should have:
347
+
348
+1. Reviewed the basic concepts about repetition structures, nested loops, and bi-dimensional arrays.
349
+
350
+2. Understood the methods of the `QImage` class for pixel manipulation.
351
+
352
+3. Studied the concepts and instructions for the laboratory session.
353
+
354
+4. Taken the Pre-Lab quiz that is found in Moodle.
355
+
356
+---
357
+
358
+---
359
+
360
+## Green-screen technology
361
+
362
+In this laboratory experience the student will be exposed to the basics of the green screen technology used in newscasting, motion pictures, video games, and others.  Green screen compositing, or more generally chroma key compositing, is a technique for combining two still images or video frames[1]. Chroma key compositing, or chroma keying, is a special effects / post-production technique for compositing (layering) two images or video streams together based on color hues (range)[2]. Chroma keying can be done with backgrounds of any color that are uniform and distinct, but green and blue backgrounds are more commonly used because they differ most distinctly in hue from most human skin colors.
363
+
364
+With this laboratory we provide a simple GUI that allows the user to load an image with any solid background (although green or blue are preferred), and a background image. Your task is to implement a function that creates a third, merged image, in which the image with the solid background appears over the background image (with the solid background removed). Figure 1 shows an example of the expected results.
365
+
366
+---
367
+
368
+![figure1.png](images/figure1.png)
369
+
370
+Figure 1: Example of the expected results. The object of interest is the hand carrying the sunglasses.
371
+
372
+---
373
+
374
+For illustration purposes, let's call the image with the solid background *image A* and let's say that the solid color in the background has an RGB `0x00ff00` (pure green). We will refer to the image with the interesting background as *image B*. Let's also assume that both images are the same size (width and height). 
375
+
376
+To produce the merged image (*image C*), we could start by completely copying *image B* to *image *C*. Then, to insert only the object of interest into the merged image we could traverse *image A* pixel by pixel. We would compare the color of each pixel *p* in *image A* to the color `0x00FF00`, if they are *similar* we do nothing (because it means that this pixel is part of the solid color background). If the color of *p* is not *similar* to `0x00FF00`, we modify the corresponding pixel in *image C*, copying the color of the object's pixel to the merged image.
377
+
378
+---
379
+
380
+![figure2.png](images/figure2.png)
381
+
382
+**Figure 2** - Illustration of how the algorithm decides which pixels to include from *image A* into *image C*.
383
+
384
+---
385
+
386
+---
387
+
388
+
389
+###Pixels
390
+
391
+The smallest element in an image is called a *pixel*. This unit consists of a single color. Since each color is a combination of tones for the primary red, green and blue colors, it is coded as an unsigned integer whose bytes represent the tones of red, green and blue of the pixel (Figure 3). This combination is called the color's *RGB* which is an acronym for "Red-Green-Blue". For example, a pure red pixel has an RGB representation of `0x00ff0000`, while a white pixel has an RGB representation of `0x00FFFFFF` (since the color white is a combination of tones of red, green and blue in all of their intensity).
392
+
393
+---
394
+
395
+![figure3.png](images/figure3.png)
396
+
397
+**Figure 3.** Bit distribution for the tones of red, green and blue in an RGB representation. Each tone can have values between 0x00 (the eight bits in 0) and (0xFF (the 8 bits in 1).
398
+
399
+---
400
+
401
+`Qt` uses the `QRgb` type to represent `RGB` values. Using certain functions that are described below we can obtains the red, green and blue components of the `QRgb` value of the pixel and manipulate the images.
402
+
403
+###Library
404
+
405
+In today's laboratory experience you will use the `QImage` class. This class permits access to the data in the pixels of an image to manipulate it. The documentation for the `QImage` class can be found in http://doc.qt.io/qt-4.8/qimage.html.
406
+
407
+The code provided in this project contains the following objects of the `QImage` class:
408
+
409
+* `originalImage`   // contains the information of the original image that you will edit
410
+*  `editedImage`  // will contain the edited image
411
+
412
+The objects of the `QImage` class have the following methods that will be useful for today's laboratory experience:
413
+
414
+* `width()`      // returns the integer value for the image's width
415
+* `height()`      // returns the integer value for the image's height
416
+* `pixel(i, j)`       // returns the `QRgb` for the pixel in position `(i,j)`
417
+* `setPixel(i,j, pixel)`   // modifies the value for the pixel in position `(i,j)` to the value of pixel `QRgb`
418
+
419
+The following functions are useful to work with data of type `QRgb`:
420
+
421
+* `qRed(pixel)`   // returns the tone for the pixel's red color
422
+* `qGreen(pixel)` // returns the tone for the pixel's green color
423
+* `qBlue(pixel)`  // returns the tone for the pixel's blue color
424
+* `qRgb(int red, int green, int blue)` // returns the `QRgb` pixel composed of the red, green and blue values received.
425
+
426
+
427
+####Examples:
428
+
429
+1. `QRgb myRgb = qRgb(0xff, 0x00, 0xff);`: Assigns the value `0xff00ff` to `myRgb` which represents the color ![figure2.jpg](images/figure4.jpg)
430
+
431
+    Notice that the value `0xff00ff` represents the values `0xff`, `0x0`, and `0xff`, that correspond to the red, green and blue components in `myRgb`.
432
+
433
+2. If the following `4 x 4` image of pixels represents the object `originalImage`,
434
+
435
+ ![ejemplo.png](images/ejemplo.png)
436
+
437
+then `originalImage.pixel(2,1)` returns the `rgb` value that represents the color blue ( `0x0000ff`).
438
+
439
+3. The following instruction assigns the color red to the pixel in position `(2,3)` in the edited image:
440
+
441
+`editedImage.setPixel(2,3,qRgb(0xff,0x00,0x00));`.
442
+
443
+4. The following instruction assigns to `greenContent` the value of the green tone that is contained in the pixel `(1,1)` of `originalImage`:
444
+
445
+    `int greenContent = qGreen(originalImage.pixel(1,1));`.
446
+
447
+5. The following program creates an object of the `QImage` class and prints the red, green and blue components of the pixel in the center of the image. The image used is the one specified within the parenthesis during the creation of the object, that is, the file `chuck.png`
448
+
449
+---
450
+
451
+```cpp
452
+#include <QImage>
453
+#include <iostream>
454
+
455
+using namespace std;
456
+int main() {
457
+    QImage myImage(“/Users/rarce/Downloads/chuck.png”);
458
+    QRgb    centralPixel;
459
+
460
+    centralPixel = myImage.pixel(myImage.width() / 2, myImage.height() / 2);
461
+
462
+    cout    << hex;
463
+
464
+    cout    << “The red, green and blue components of the middle pixel are: “
465
+        << qRed(centralPixel) << “, “
466
+        << qGreen(centralPixel) << “, “
467
+        << qBlue(centralPixel) << endl;
468
+    return 0;
469
+}
470
+```
471
+
472
+---
473
+
474
+
475
+
476
+### Measuring similarity of pixel colors
477
+
478
+Look at Figure 4, although the background in *image A* looks uniform, it really includes pixels of diverse (although similar) colors.
479
+
480
+---
481
+
482
+![figure5.png](images/figure5.png)
483
+
484
+**Figure 4** - What may seem as a *solid* color, really is not. Thus, we use the color *distance*.
485
+
486
+---
487
+
488
+Instead of only considering as part of the solid background the pixels whose color is **exactly** `0x00FF00`, we measure a color's *distance* from the *pure* color. A small *distance* means that the color is *almost* a pure green. A large *distance* means that the color is very different from green. The equation for *distance* is:
489
+
490
+$$distance = \sqrt{(P_R-S_R)^2+(P_G-S_G)^2+(P_B-S_B)^2},$$
491
+
492
+where $$P_R$$, $$P_G$$, and $$P_B$$ are the red, green and blue components of the pixel being considered.  $$S_R$$, $$S_G$$, and $$S_B$$ are the components of the solid background, e.g. in our example $$S_R=S_B=0$$ y $$S_G=255$$.
493
+
494
+---
495
+
496
+---
497
+
498
+##Laboratory Session
499
+
500
+In this laboratory experience, starting with an image with an object of interest over a solid color background and an image to use as a background, you will define and implement a function that creates a third merged image where the image with the object of interest will have its background color removed and will appear over the image chosen to be the background.
501
+
502
+You will be working with the `Filter.cpp` file. The following is a review of the variables in this file:
503
+
504
+* objectImage: reference to the object image with the solid background
505
+* backgroundImage: reference to the background image object
506
+* mergedImage: reference to the merged image
507
+* threshold: is a theshold value used to compare the distances between the object pixel and the solid background pixel. In the provided code, the threshold value is read from the slideBar.
508
+* ghost: is a boolean value used to apply ghost filter to pixels.
509
+* (x, y): contains the coordinate of the pixel whose color will be used as solid background. The default value is (0,0).
510
+* (offset_x, offset_y): the coordinate of the merged image where the upper-left corner of the objectImage should be inserted. The default value is (0,0).
511
+
512
+### Exercise 1: Create a composite image
513
+
514
+####Instructions
515
+
516
+1. Load the Qt project called `GreenScreenLab` by double-clicking on the `GreenScreenLab.pro` file in the `Documents/eip/Arrays-GreenScreen` folder of your computer. You may also go to `http://bitbucket.org/eip-uprrp/arrays-greenscreen` to download the `Arrays-GreenScreen` folder to your computer.
517
+
518
+2. Build and run the program. The provided code creates the interface shown in Figure 5. The buttons  *Select Image* and *Select Background Image* have already been programmed to perform their actions.
519
+
520
+    ---
521
+
522
+    ![figure6.png](images/figure6.png)
523
+
524
+    **Figure 5.**Interface for the green screen application.
525
+
526
+    ---
527
+
528
+3. Click the *Select Image* button to load the image that contains the solid background, the click *Select Background Image* to load the image that contains the interesting background. The folders called `green_background` and `landscapes` contain some images that are suitable as the first and second images.  
529
+
530
+
531
+4. Your first task is to complete the function `MergeImages` in file `Filter.cpp`.`MergeImages` is the function that is called when the user presses the button captioned `Merge Images` or when he slides the slide bar. The function `MergeImages` receives the image with the solid background, the background image, a reference to the merged image, a threshold value, and the coordinates `(x,y)` of the pixel from which we will extract the sample *green* background color, and the coordinates `(offset_x, offset_y)` from the merged image.
532
+
533
+For this first exercise you can ignore the following parameters: ghost, x_offset, y_offset. Your implementation should place the `objectImage` into the `mergedImage` starting at position (0,0).
534
+
535
+**The algorithm**
536
+
537
+1. Acquire the value of the solid color. The solid color will be the color of the pixel in the coordinate `(x,y)` of the object image with the solid background. The default value for `(x,y)` is `(0,0)`.
538
+
539
+2. For every position `(i,j)`, read the color of the corresponding pixel in the objectImage. Compute the distance of the pixel colors to the solid color. If the distance between the solid color and the color of the pixel of the image is greater than the threshold, set the corresponding `(i,j)` pixel in the merged image to the objectImage pixel color. 
540
+
541
+Test your implementation by loading object and background images and verifying the merged image.
542
+
543
+## Exercise 2: Creating a composite image using a ghost filter
544
+
545
+In this exercise you will modify Exercise 1 to apply a ghost filter to each of the pixels that will be composed over the background image (if the `ghost` variable is true). The filter creates a ghost like effect on the objects composed over the background image, as in Figure 6.
546
+
547
+
548
+---
549
+
550
+![figure7.png](images/figure7.png)
551
+
552
+**Figure 6** - In this example, the dog in the image with the solid background is composed in the background image with the ghost filter. 
553
+
554
+---
555
+
556
+The ghost effect is achieved by *averaging* the background color with the object's color (instead of simply *replacing* the background with the object's color). The average is performed for each of the components (red, green and blue).  
557
+
558
+$$N_R=\frac{S_R+B_R}{2}$$
559
+$$N_G=\frac{S_G+B_G}{2}$$
560
+$$N_B=\frac{S_B+B_B}{2},$$
561
+
562
+
563
+where $$N_R$$, $$N_G$$, and $$N_B$$ are the red, green and blue components of the new ghost pixel. $$S_R$$, $$S_G$$, and $$S_B$$ are the components of the object image. $$B_R$$, $$B_G$$, $$B_B$$ are the components of the background image. 
564
+
565
+## Exercise 3: Create a composite image placing the object in a specified position
566
+
567
+The widget that displays the background has been programmed to register the position where the user clicks. In this exercise you will program the `MergeImages` function so that the position that user clicks in the background image is used as the *top left* corner where the *object* image will be displayed in the merged image. The following figures illustrates the effect. Note the *Selected Coord* values under the images.
568
+
569
+
570
+---
571
+
572
+![figure8.png](images/figure8.png)
573
+
574
+
575
+**Figure 7.** In this example, the background image has not been clicked. Thus the "Selected Coord" is at its default value of (0,0).  The dog image is inserted with its top-left corner at (0,0) in the merged image.
576
+
577
+---
578
+
579
+![figure9.png](images/figure9.png)
580
+
581
+
582
+**Figure 8.** In this example, the background image has been clicked at coordinate `(827,593)`. The dog image is inserted with its top-left corner at `(827,593)` in the merged image.
583
+
584
+---
585
+
586
+
587
+In this exercise your task will be the same as in Exercise 1, but this time you will need to offset the *object* image inside the *merged* image by the amount specified in the `x_offset` and `y_offset` parameters. Please take into consideration the merged image boundaries when you are inserting the object image. The user may specify an offset where the boundaries are exceeded and the object will be cut, as in Figure 9.  
588
+
589
+---
590
+
591
+![figure10.png](images/figure10.png)
592
+
593
+**Figure 9**. In this example, the user selected a position that assigned values that are too large for `x_offset` and `y_offset`; the implementation made the adjustment so part of the dog appeared in the merged image.
594
+
595
+---
596
+
597
+The example in Figure 10 shows how the object image will behave when merging it with the background image. The `x_offset` and `y_offset` variables represent the point in the background image where the upper left corner of the object image will be placed. Notice that if a point too close to the image border is chosen, part of the object image will be outside of the limits of the background image. As we have seen when manipulating arrays, if one tries to access or alter elements that are outside of the size range of the array, we get a fatal compilation error. The same thing happens with the images.
598
+
599
+You should make sure that your implementation takes into account the `x_offset` and `y_offset` values so the composition does not try to access or alter pixels outside of the limits of the background image. If you try to access or alter pixels outside of these limits, it will result in a fatal error.
600
+
601
+---
602
+
603
+![figure11.png](images/figure11.png)
604
+
605
+**Figure 10.** Illustration of the object image with pixels that are outside of the background image limits. If the possibility of this happening is not taken into account in the implementation, there will be a fatal error.
606
+
607
+---
608
+
609
+
610
+Validate your implementation by choosing several offsets and observing the merged image. Be sure to try cases in which you choose x and y offsets that result in the object being cropped in the merged image (as in Figure 9).
611
+
612
+
613
+---
614
+
615
+---
616
+
617
+### Deliverables
618
+
619
+
620
+Use "Deliverables" in Moodle to upload the `filter.cpp` file that contains the `MergeImages` function. Remember to use good programming techniques, include the names of the programmers involved, and to document your program.
621
+
622
+---
623
+
624
+---
625
+
626
+### References
627
+
628
+[1] http://en.wikipedia.org/wiki/Green_screen_(disambiguation)
629
+
630
+[2] http://en.wikipedia.org/wiki/Chroma_key
631
+
632
+[3] http://doc.qt.io/qt-4.8/qimage.html.
633
+
634
+
635
+
636
+

+ 129
- 0
doc/en/html/_clickable_label_8h_source.html View File

@@ -0,0 +1,129 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: ClickableLabel.h Source File</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+    </ul>
66
+  </div>
67
+</div><!-- top -->
68
+<!-- window showing the filter options -->
69
+<div id="MSearchSelectWindow"
70
+     onmouseover="return searchBox.OnSearchSelectShow()"
71
+     onmouseout="return searchBox.OnSearchSelectHide()"
72
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
73
+</div>
74
+
75
+<!-- iframe showing the search results (closed by default) -->
76
+<div id="MSearchResultsWindow">
77
+<iframe src="javascript:void(0)" frameborder="0" 
78
+        name="MSearchResults" id="MSearchResults">
79
+</iframe>
80
+</div>
81
+
82
+<div class="header">
83
+  <div class="headertitle">
84
+<div class="title">ClickableLabel.h</div>  </div>
85
+</div><!--header-->
86
+<div class="contents">
87
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef CLICKABLELABEL_H</span></div>
88
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define CLICKABLELABEL_H</span></div>
89
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;</div>
90
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &lt;QLabel&gt;</span></div>
91
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;QMouseEvent&gt;</span></div>
92
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;QDebug&gt;</span></div>
93
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div>
94
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="class_clickable_label.html">   13</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_clickable_label.html">ClickableLabel</a> : <span class="keyword">public</span> QLabel{</div>
95
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;    Q_OBJECT</div>
96
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="keyword">public</span>:</div>
97
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div>
98
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="class_clickable_label.html#a62b23a9a7f7aed36692db03640561072">ClickableLabel</a>(QWidget *parent = 0);</div>
99
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div>
100
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_clickable_label.html#a6207e08167257d9a0505a219a659c53f">mouseMoveEvent</a>(QMouseEvent *ev);</div>
101
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div>
102
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b">mousePressEvent</a>(QMouseEvent *ev);</div>
103
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div>
104
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da">leaveEvent</a>(QEvent *);</div>
105
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keywordtype">int</span> x,y;</div>
106
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div>
107
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;signals:</div>
108
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordtype">void</span> Mouse_Pressed();</div>
109
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="keywordtype">void</span> Mouse_Pos();</div>
110
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div>
111
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div>
112
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keywordtype">void</span> Mouse_Left();</div>
113
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;};</div>
114
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div>
115
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#endif // CLICKABLELABEL_H</span></div>
116
+<div class="ttc" id="class_clickable_label_html_ad884c3cdc7a6c16af19143e84c79b5da"><div class="ttname"><a href="class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da">ClickableLabel::leaveEvent</a></div><div class="ttdeci">void leaveEvent(QEvent *)</div><div class="ttdoc">Funtion to add mouse event to the labelWidget. </div><div class="ttdef"><b>Definition:</b> ClickableLabel.cpp:40</div></div>
117
+<div class="ttc" id="class_clickable_label_html"><div class="ttname"><a href="class_clickable_label.html">ClickableLabel</a></div><div class="ttdef"><b>Definition:</b> ClickableLabel.h:13</div></div>
118
+<div class="ttc" id="class_clickable_label_html_adfec8a6c2ddd87b673f3a734ea6afa2b"><div class="ttname"><a href="class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b">ClickableLabel::mousePressEvent</a></div><div class="ttdeci">void mousePressEvent(QMouseEvent *ev)</div><div class="ttdoc">Funtion to add mouse event to the labelWidget. </div><div class="ttdef"><b>Definition:</b> ClickableLabel.cpp:29</div></div>
119
+<div class="ttc" id="class_clickable_label_html_a6207e08167257d9a0505a219a659c53f"><div class="ttname"><a href="class_clickable_label.html#a6207e08167257d9a0505a219a659c53f">ClickableLabel::mouseMoveEvent</a></div><div class="ttdeci">void mouseMoveEvent(QMouseEvent *ev)</div><div class="ttdoc">Funtion to add mouse event to the labelWidget. </div><div class="ttdef"><b>Definition:</b> ClickableLabel.cpp:18</div></div>
120
+<div class="ttc" id="class_clickable_label_html_a62b23a9a7f7aed36692db03640561072"><div class="ttname"><a href="class_clickable_label.html#a62b23a9a7f7aed36692db03640561072">ClickableLabel::ClickableLabel</a></div><div class="ttdeci">ClickableLabel(QWidget *parent=0)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> ClickableLabel.cpp:8</div></div>
121
+</div><!-- fragment --></div><!-- contents -->
122
+<!-- start footer part -->
123
+<hr class="footer"/><address class="footer"><small>
124
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
125
+<img class="footer" src="doxygen.png" alt="doxygen"/>
126
+</a> 1.8.9.1
127
+</small></address>
128
+</body>
129
+</html>

+ 96
- 0
doc/en/html/_filter_8cpp.html View File

@@ -0,0 +1,96 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Filter.cpp File Reference</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+    </ul>
66
+  </div>
67
+<!-- window showing the filter options -->
68
+<div id="MSearchSelectWindow"
69
+     onmouseover="return searchBox.OnSearchSelectShow()"
70
+     onmouseout="return searchBox.OnSearchSelectHide()"
71
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+</div>
73
+
74
+<!-- iframe showing the search results (closed by default) -->
75
+<div id="MSearchResultsWindow">
76
+<iframe src="javascript:void(0)" frameborder="0" 
77
+        name="MSearchResults" id="MSearchResults">
78
+</iframe>
79
+</div>
80
+
81
+</div><!-- top -->
82
+<div class="header">
83
+  <div class="headertitle">
84
+<div class="title">Filter.cpp File Reference</div>  </div>
85
+</div><!--header-->
86
+<div class="contents">
87
+<div class="textblock"><code>#include &quot;MergePanel.h&quot;</code><br />
88
+</div></div><!-- contents -->
89
+<!-- start footer part -->
90
+<hr class="footer"/><address class="footer"><small>
91
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
92
+<img class="footer" src="doxygen.png" alt="doxygen"/>
93
+</a> 1.8.9.1
94
+</small></address>
95
+</body>
96
+</html>

+ 160
- 0
doc/en/html/_merge_panel_8h_source.html View File

@@ -0,0 +1,160 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: MergePanel.h Source File</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
65
+    </ul>
66
+  </div>
67
+</div><!-- top -->
68
+<!-- window showing the filter options -->
69
+<div id="MSearchSelectWindow"
70
+     onmouseover="return searchBox.OnSearchSelectShow()"
71
+     onmouseout="return searchBox.OnSearchSelectHide()"
72
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
73
+</div>
74
+
75
+<!-- iframe showing the search results (closed by default) -->
76
+<div id="MSearchResultsWindow">
77
+<iframe src="javascript:void(0)" frameborder="0" 
78
+        name="MSearchResults" id="MSearchResults">
79
+</iframe>
80
+</div>
81
+
82
+<div class="header">
83
+  <div class="headertitle">
84
+<div class="title">MergePanel.h</div>  </div>
85
+</div><!--header-->
86
+<div class="contents">
87
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef MAINWINDOW_H</span></div>
88
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define MAINWINDOW_H</span></div>
89
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;</div>
90
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &lt;QMainWindow&gt;</span></div>
91
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;QFileDialog&gt;</span></div>
92
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;QDir&gt;</span></div>
93
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;QMessageBox&gt;</span></div>
94
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;QShortcut&gt;</span></div>
95
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;QImage&gt;</span></div>
96
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;QDebug&gt;</span></div>
97
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div>
98
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div>
99
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div>
100
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="namespace_ui.html">   20</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_ui.html">Ui</a> {</div>
101
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">class </span><a class="code" href="class_main_window.html">MainWindow</a>;</div>
102
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;}</div>
103
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div>
104
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="class_main_window.html">   24</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_main_window.html">MainWindow</a> : <span class="keyword">public</span> QMainWindow</div>
105
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;{</div>
106
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    Q_OBJECT</div>
107
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div>
108
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">public</span>:</div>
109
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db">MainWindow</a>(QWidget *parent = 0);</div>
110
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div>
111
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc">MergeImages</a>(<span class="keyword">const</span> QImage &amp;, <span class="keyword">const</span> QImage &amp;, QImage &amp;, <span class="keywordtype">int</span>, <span class="keywordtype">bool</span>=<span class="keyword">false</span>, <span class="keywordtype">int</span>=0, <span class="keywordtype">int</span>=0, <span class="keywordtype">int</span>=0, <span class="keywordtype">int</span>=0) ;</div>
112
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div>
113
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <a class="code" href="class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7">~MainWindow</a>();</div>
114
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div>
115
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keyword">private</span> slots:</div>
116
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#a515c32e265a56100d4c8e6a7718aec38">on_ghostBox_clicked</a>();</div>
117
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div>
118
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#a0f9a3a6f81784e420db099e1bb051475">on_btnSelectImage_clicked</a>();</div>
119
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div>
120
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2">on_btnSelectBackground_clicked</a>();</div>
121
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div>
122
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8">on_btnMergeImages_clicked</a>();</div>
123
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div>
124
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6">on_btnSaveImage_clicked</a>();</div>
125
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div>
126
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9">Mouse_Pressed</a>();</div>
127
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div>
128
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordtype">void</span> Mouse_PressedBackground() ;</div>
129
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div>
130
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7">on_thresholdSlider_actionTriggered</a>();</div>
131
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div>
132
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="keyword">private</span>:</div>
133
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    Ui::MainWindow *ui;</div>
134
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    QImage originalImage;</div>
135
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    QImage backgroundImage;</div>
136
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    QImage mergedImage;</div>
137
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;};</div>
138
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div>
139
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="preprocessor">#endif // MAINWINDOW_H</span></div>
140
+<div class="ttc" id="namespace_ui_html"><div class="ttname"><a href="namespace_ui.html">Ui</a></div><div class="ttdef"><b>Definition:</b> MergePanel.h:20</div></div>
141
+<div class="ttc" id="class_main_window_html_ae98d00a93bc118200eeef9f9bba1dba7"><div class="ttname"><a href="class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7">MainWindow::~MainWindow</a></div><div class="ttdeci">~MainWindow()</div><div class="ttdoc">Destructor for the MainWindow. </div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:47</div></div>
142
+<div class="ttc" id="class_main_window_html_ac0ab1a7707da7b053b36b869eb7711d2"><div class="ttname"><a href="class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2">MainWindow::on_btnSelectBackground_clicked</a></div><div class="ttdeci">void on_btnSelectBackground_clicked()</div><div class="ttdoc">Display the file browsing window to load a background image. </div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:75</div></div>
143
+<div class="ttc" id="class_main_window_html_ad495b5030e61fb55b8ab95c5a3a559d6"><div class="ttname"><a href="class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6">MainWindow::on_btnSaveImage_clicked</a></div><div class="ttdeci">void on_btnSaveImage_clicked()</div><div class="ttdoc">Displays the file browse window to choose the path to save the merged image in the file system...</div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:113</div></div>
144
+<div class="ttc" id="class_main_window_html_a0f9a3a6f81784e420db099e1bb051475"><div class="ttname"><a href="class_main_window.html#a0f9a3a6f81784e420db099e1bb051475">MainWindow::on_btnSelectImage_clicked</a></div><div class="ttdeci">void on_btnSelectImage_clicked()</div><div class="ttdoc">Display the file browsing window to load an image. (Green Background) </div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:56</div></div>
145
+<div class="ttc" id="class_main_window_html_a46f80e359e19d2aac22df1fce85f3bdc"><div class="ttname"><a href="class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc">MainWindow::MergeImages</a></div><div class="ttdeci">void MergeImages(const QImage &amp;, const QImage &amp;, QImage &amp;, int, bool=false, int=0, int=0, int=0, int=0)</div><div class="ttdoc">Funcion that merges two images together. It takes an image with any background color and puts it in a...</div><div class="ttdef"><b>Definition:</b> Filter.cpp:13</div></div>
146
+<div class="ttc" id="class_main_window_html_a8b244be8b7b7db1b08de2a2acb9409db"><div class="ttname"><a href="class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db">MainWindow::MainWindow</a></div><div class="ttdeci">MainWindow(QWidget *parent=0)</div><div class="ttdoc">Default Constructor for the MainWindow. </div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:12</div></div>
147
+<div class="ttc" id="class_main_window_html_a8ed5fa16d89ef45aa856b5cc4392a6d8"><div class="ttname"><a href="class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8">MainWindow::on_btnMergeImages_clicked</a></div><div class="ttdeci">void on_btnMergeImages_clicked()</div><div class="ttdoc">Invokes the function that merges the green screen image with the background image, then displays the merged image. </div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:96</div></div>
148
+<div class="ttc" id="class_main_window_html_a1d0a4664de36d7b98928cb815aaf29b9"><div class="ttname"><a href="class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9">MainWindow::Mouse_Pressed</a></div><div class="ttdeci">void Mouse_Pressed()</div><div class="ttdoc">Function that gets the coordinates of the image with the greenscreen. </div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:126</div></div>
149
+<div class="ttc" id="class_main_window_html"><div class="ttname"><a href="class_main_window.html">MainWindow</a></div><div class="ttdef"><b>Definition:</b> MergePanel.h:24</div></div>
150
+<div class="ttc" id="class_main_window_html_a515c32e265a56100d4c8e6a7718aec38"><div class="ttname"><a href="class_main_window.html#a515c32e265a56100d4c8e6a7718aec38">MainWindow::on_ghostBox_clicked</a></div><div class="ttdeci">void on_ghostBox_clicked()</div><div class="ttdoc">Funtion that invokes the thresholdSlider function and creates a ghost version of the image with green...</div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:179</div></div>
151
+<div class="ttc" id="class_main_window_html_ad753a0e24a11fedfaeb6f3ba665749d7"><div class="ttname"><a href="class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7">MainWindow::on_thresholdSlider_actionTriggered</a></div><div class="ttdeci">void on_thresholdSlider_actionTriggered()</div><div class="ttdoc">Invokes the function that merges the green screen image with the background image. </div><div class="ttdef"><b>Definition:</b> MergePanel.cpp:164</div></div>
152
+</div><!-- fragment --></div><!-- contents -->
153
+<!-- start footer part -->
154
+<hr class="footer"/><address class="footer"><small>
155
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
156
+<img class="footer" src="doxygen.png" alt="doxygen"/>
157
+</a> 1.8.9.1
158
+</small></address>
159
+</body>
160
+</html>

+ 104
- 0
doc/en/html/annotated.html View File

@@ -0,0 +1,104 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Class List</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li class="current"><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+</div><!-- top -->
71
+<!-- window showing the filter options -->
72
+<div id="MSearchSelectWindow"
73
+     onmouseover="return searchBox.OnSearchSelectShow()"
74
+     onmouseout="return searchBox.OnSearchSelectHide()"
75
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
76
+</div>
77
+
78
+<!-- iframe showing the search results (closed by default) -->
79
+<div id="MSearchResultsWindow">
80
+<iframe src="javascript:void(0)" frameborder="0" 
81
+        name="MSearchResults" id="MSearchResults">
82
+</iframe>
83
+</div>
84
+
85
+<div class="header">
86
+  <div class="headertitle">
87
+<div class="title">Class List</div>  </div>
88
+</div><!--header-->
89
+<div class="contents">
90
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
91
+<table class="directory">
92
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_clickable_label.html" target="_self">ClickableLabel</a></td><td class="desc"></td></tr>
93
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_main_window.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
94
+</table>
95
+</div><!-- directory -->
96
+</div><!-- contents -->
97
+<!-- start footer part -->
98
+<hr class="footer"/><address class="footer"><small>
99
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
100
+<img class="footer" src="doxygen.png" alt="doxygen"/>
101
+</a> 1.8.9.1
102
+</small></address>
103
+</body>
104
+</html>

BIN
doc/en/html/arrowdown.png View File


BIN
doc/en/html/arrowright.png View File


BIN
doc/en/html/bc_s.png View File


BIN
doc/en/html/bdwn.png View File


+ 110
- 0
doc/en/html/class_clickable_label-members.html View File

@@ -0,0 +1,110 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Member List</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+<!-- window showing the filter options -->
71
+<div id="MSearchSelectWindow"
72
+     onmouseover="return searchBox.OnSearchSelectShow()"
73
+     onmouseout="return searchBox.OnSearchSelectHide()"
74
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
75
+</div>
76
+
77
+<!-- iframe showing the search results (closed by default) -->
78
+<div id="MSearchResultsWindow">
79
+<iframe src="javascript:void(0)" frameborder="0" 
80
+        name="MSearchResults" id="MSearchResults">
81
+</iframe>
82
+</div>
83
+
84
+</div><!-- top -->
85
+<div class="header">
86
+  <div class="headertitle">
87
+<div class="title">ClickableLabel Member List</div>  </div>
88
+</div><!--header-->
89
+<div class="contents">
90
+
91
+<p>This is the complete list of members for <a class="el" href="class_clickable_label.html">ClickableLabel</a>, including all inherited members.</p>
92
+<table class="directory">
93
+  <tr class="even"><td class="entry"><a class="el" href="class_clickable_label.html#a62b23a9a7f7aed36692db03640561072">ClickableLabel</a>(QWidget *parent=0)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
94
+  <tr><td class="entry"><a class="el" href="class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da">leaveEvent</a>(QEvent *)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"></td></tr>
95
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Mouse_Left</b>() (defined in <a class="el" href="class_clickable_label.html">ClickableLabel</a>)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
96
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>Mouse_Pos</b>() (defined in <a class="el" href="class_clickable_label.html">ClickableLabel</a>)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
97
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Mouse_Pressed</b>() (defined in <a class="el" href="class_clickable_label.html">ClickableLabel</a>)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
98
+  <tr><td class="entry"><a class="el" href="class_clickable_label.html#a6207e08167257d9a0505a219a659c53f">mouseMoveEvent</a>(QMouseEvent *ev)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"></td></tr>
99
+  <tr class="even"><td class="entry"><a class="el" href="class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b">mousePressEvent</a>(QMouseEvent *ev)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"></td></tr>
100
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>x</b> (defined in <a class="el" href="class_clickable_label.html">ClickableLabel</a>)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"></td></tr>
101
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>y</b> (defined in <a class="el" href="class_clickable_label.html">ClickableLabel</a>)</td><td class="entry"><a class="el" href="class_clickable_label.html">ClickableLabel</a></td><td class="entry"></td></tr>
102
+</table></div><!-- contents -->
103
+<!-- start footer part -->
104
+<hr class="footer"/><address class="footer"><small>
105
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
106
+<img class="footer" src="doxygen.png" alt="doxygen"/>
107
+</a> 1.8.9.1
108
+</small></address>
109
+</body>
110
+</html>

+ 161
- 0
doc/en/html/class_clickable_label.html View File

@@ -0,0 +1,161 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: ClickableLabel Class Reference</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+<!-- window showing the filter options -->
71
+<div id="MSearchSelectWindow"
72
+     onmouseover="return searchBox.OnSearchSelectShow()"
73
+     onmouseout="return searchBox.OnSearchSelectHide()"
74
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
75
+</div>
76
+
77
+<!-- iframe showing the search results (closed by default) -->
78
+<div id="MSearchResultsWindow">
79
+<iframe src="javascript:void(0)" frameborder="0" 
80
+        name="MSearchResults" id="MSearchResults">
81
+</iframe>
82
+</div>
83
+
84
+</div><!-- top -->
85
+<div class="header">
86
+  <div class="summary">
87
+<a href="#signals">Signals</a> &#124;
88
+<a href="#pub-methods">Public Member Functions</a> &#124;
89
+<a href="#pub-attribs">Public Attributes</a> &#124;
90
+<a href="class_clickable_label-members.html">List of all members</a>  </div>
91
+  <div class="headertitle">
92
+<div class="title">ClickableLabel Class Reference</div>  </div>
93
+</div><!--header-->
94
+<div class="contents">
95
+
96
+<p><code>#include &lt;<a class="el" href="_clickable_label_8h_source.html">ClickableLabel.h</a>&gt;</code></p>
97
+<div class="dynheader">
98
+Inheritance diagram for ClickableLabel:</div>
99
+<div class="dyncontent">
100
+ <div class="center">
101
+  <img src="class_clickable_label.png" usemap="#ClickableLabel_map" alt=""/>
102
+  <map id="ClickableLabel_map" name="ClickableLabel_map">
103
+</map>
104
+ </div></div>
105
+<table class="memberdecls">
106
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="signals"></a>
107
+Signals</h2></td></tr>
108
+<tr class="memitem:a6921078a370cf6289bc029ff92c6239c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6921078a370cf6289bc029ff92c6239c"></a>
109
+void&#160;</td><td class="memItemRight" valign="bottom"><b>Mouse_Pressed</b> ()</td></tr>
110
+<tr class="separator:a6921078a370cf6289bc029ff92c6239c"><td class="memSeparator" colspan="2">&#160;</td></tr>
111
+<tr class="memitem:a7f7b212c028f557c801ce57425cbdba8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f7b212c028f557c801ce57425cbdba8"></a>
112
+void&#160;</td><td class="memItemRight" valign="bottom"><b>Mouse_Pos</b> ()</td></tr>
113
+<tr class="separator:a7f7b212c028f557c801ce57425cbdba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
114
+<tr class="memitem:abab95f014364c2fc02b6e8c1f1794b5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abab95f014364c2fc02b6e8c1f1794b5c"></a>
115
+void&#160;</td><td class="memItemRight" valign="bottom"><b>Mouse_Left</b> ()</td></tr>
116
+<tr class="separator:abab95f014364c2fc02b6e8c1f1794b5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
117
+</table><table class="memberdecls">
118
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
119
+Public Member Functions</h2></td></tr>
120
+<tr class="memitem:a62b23a9a7f7aed36692db03640561072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62b23a9a7f7aed36692db03640561072"></a>
121
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_clickable_label.html#a62b23a9a7f7aed36692db03640561072">ClickableLabel</a> (QWidget *parent=0)</td></tr>
122
+<tr class="memdesc:a62b23a9a7f7aed36692db03640561072"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <br /></td></tr>
123
+<tr class="separator:a62b23a9a7f7aed36692db03640561072"><td class="memSeparator" colspan="2">&#160;</td></tr>
124
+<tr class="memitem:a6207e08167257d9a0505a219a659c53f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6207e08167257d9a0505a219a659c53f"></a>
125
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_clickable_label.html#a6207e08167257d9a0505a219a659c53f">mouseMoveEvent</a> (QMouseEvent *ev)</td></tr>
126
+<tr class="memdesc:a6207e08167257d9a0505a219a659c53f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Funtion to add mouse event to the labelWidget. <br /></td></tr>
127
+<tr class="separator:a6207e08167257d9a0505a219a659c53f"><td class="memSeparator" colspan="2">&#160;</td></tr>
128
+<tr class="memitem:adfec8a6c2ddd87b673f3a734ea6afa2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfec8a6c2ddd87b673f3a734ea6afa2b"></a>
129
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b">mousePressEvent</a> (QMouseEvent *ev)</td></tr>
130
+<tr class="memdesc:adfec8a6c2ddd87b673f3a734ea6afa2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Funtion to add mouse event to the labelWidget. <br /></td></tr>
131
+<tr class="separator:adfec8a6c2ddd87b673f3a734ea6afa2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
132
+<tr class="memitem:ad884c3cdc7a6c16af19143e84c79b5da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad884c3cdc7a6c16af19143e84c79b5da"></a>
133
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da">leaveEvent</a> (QEvent *)</td></tr>
134
+<tr class="memdesc:ad884c3cdc7a6c16af19143e84c79b5da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Funtion to add mouse event to the labelWidget. <br /></td></tr>
135
+<tr class="separator:ad884c3cdc7a6c16af19143e84c79b5da"><td class="memSeparator" colspan="2">&#160;</td></tr>
136
+</table><table class="memberdecls">
137
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
138
+Public Attributes</h2></td></tr>
139
+<tr class="memitem:ac4efea912d411bc2ab98b4ea06cb076a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4efea912d411bc2ab98b4ea06cb076a"></a>
140
+int&#160;</td><td class="memItemRight" valign="bottom"><b>x</b></td></tr>
141
+<tr class="separator:ac4efea912d411bc2ab98b4ea06cb076a"><td class="memSeparator" colspan="2">&#160;</td></tr>
142
+<tr class="memitem:ad59a3ac94dbad08ac2f60d70b063d130"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad59a3ac94dbad08ac2f60d70b063d130"></a>
143
+int&#160;</td><td class="memItemRight" valign="bottom"><b>y</b></td></tr>
144
+<tr class="separator:ad59a3ac94dbad08ac2f60d70b063d130"><td class="memSeparator" colspan="2">&#160;</td></tr>
145
+</table>
146
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
147
+<div class="textblock"><p>A class that permits a label to be clicked.</p>
148
+<p>With this class we can determine de mouse position when is pressed and when the mouse left the label. </p>
149
+</div><hr/>The documentation for this class was generated from the following files:<ul>
150
+<li><a class="el" href="_clickable_label_8h_source.html">ClickableLabel.h</a></li>
151
+<li>ClickableLabel.cpp</li>
152
+</ul>
153
+</div><!-- contents -->
154
+<!-- start footer part -->
155
+<hr class="footer"/><address class="footer"><small>
156
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
157
+<img class="footer" src="doxygen.png" alt="doxygen"/>
158
+</a> 1.8.9.1
159
+</small></address>
160
+</body>
161
+</html>

BIN
doc/en/html/class_clickable_label.png View File


+ 116
- 0
doc/en/html/class_main_window-members.html View File

@@ -0,0 +1,116 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Member List</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+<!-- window showing the filter options -->
71
+<div id="MSearchSelectWindow"
72
+     onmouseover="return searchBox.OnSearchSelectShow()"
73
+     onmouseout="return searchBox.OnSearchSelectHide()"
74
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
75
+</div>
76
+
77
+<!-- iframe showing the search results (closed by default) -->
78
+<div id="MSearchResultsWindow">
79
+<iframe src="javascript:void(0)" frameborder="0" 
80
+        name="MSearchResults" id="MSearchResults">
81
+</iframe>
82
+</div>
83
+
84
+</div><!-- top -->
85
+<div class="header">
86
+  <div class="headertitle">
87
+<div class="title">MainWindow Member List</div>  </div>
88
+</div><!--header-->
89
+<div class="contents">
90
+
91
+<p>This is the complete list of members for <a class="el" href="class_main_window.html">MainWindow</a>, including all inherited members.</p>
92
+<table class="directory">
93
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>backgroundImage</b> (defined in <a class="el" href="class_main_window.html">MainWindow</a>)</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
94
+  <tr><td class="entry"><a class="el" href="class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db">MainWindow</a>(QWidget *parent=0)</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
95
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mergedImage</b> (defined in <a class="el" href="class_main_window.html">MainWindow</a>)</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
96
+  <tr><td class="entry"><a class="el" href="class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc">MergeImages</a>(const QImage &amp;, const QImage &amp;, QImage &amp;, int, bool=false, int=0, int=0, int=0, int=0)</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"></td></tr>
97
+  <tr class="even"><td class="entry"><a class="el" href="class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9">Mouse_Pressed</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
98
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>Mouse_PressedBackground</b>() (defined in <a class="el" href="class_main_window.html">MainWindow</a>)</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
99
+  <tr class="even"><td class="entry"><a class="el" href="class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8">on_btnMergeImages_clicked</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
100
+  <tr><td class="entry"><a class="el" href="class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6">on_btnSaveImage_clicked</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
101
+  <tr class="even"><td class="entry"><a class="el" href="class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2">on_btnSelectBackground_clicked</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
102
+  <tr><td class="entry"><a class="el" href="class_main_window.html#a0f9a3a6f81784e420db099e1bb051475">on_btnSelectImage_clicked</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
103
+  <tr class="even"><td class="entry"><a class="el" href="class_main_window.html#a515c32e265a56100d4c8e6a7718aec38">on_ghostBox_clicked</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
104
+  <tr><td class="entry"><a class="el" href="class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7">on_thresholdSlider_actionTriggered</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
105
+  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>originalImage</b> (defined in <a class="el" href="class_main_window.html">MainWindow</a>)</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
106
+  <tr bgcolor="#f0f0f0"><td class="entry"><b>ui</b> (defined in <a class="el" href="class_main_window.html">MainWindow</a>)</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
107
+  <tr class="even"><td class="entry"><a class="el" href="class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7">~MainWindow</a>()</td><td class="entry"><a class="el" href="class_main_window.html">MainWindow</a></td><td class="entry"></td></tr>
108
+</table></div><!-- contents -->
109
+<!-- start footer part -->
110
+<hr class="footer"/><address class="footer"><small>
111
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
112
+<img class="footer" src="doxygen.png" alt="doxygen"/>
113
+</a> 1.8.9.1
114
+</small></address>
115
+</body>
116
+</html>

+ 207
- 0
doc/en/html/class_main_window.html View File

@@ -0,0 +1,207 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: MainWindow Class Reference</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+<!-- window showing the filter options -->
71
+<div id="MSearchSelectWindow"
72
+     onmouseover="return searchBox.OnSearchSelectShow()"
73
+     onmouseout="return searchBox.OnSearchSelectHide()"
74
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
75
+</div>
76
+
77
+<!-- iframe showing the search results (closed by default) -->
78
+<div id="MSearchResultsWindow">
79
+<iframe src="javascript:void(0)" frameborder="0" 
80
+        name="MSearchResults" id="MSearchResults">
81
+</iframe>
82
+</div>
83
+
84
+</div><!-- top -->
85
+<div class="header">
86
+  <div class="summary">
87
+<a href="#pub-methods">Public Member Functions</a> &#124;
88
+<a href="#pri-slots">Private Slots</a> &#124;
89
+<a href="#pri-attribs">Private Attributes</a> &#124;
90
+<a href="class_main_window-members.html">List of all members</a>  </div>
91
+  <div class="headertitle">
92
+<div class="title">MainWindow Class Reference</div>  </div>
93
+</div><!--header-->
94
+<div class="contents">
95
+<div class="dynheader">
96
+Inheritance diagram for MainWindow:</div>
97
+<div class="dyncontent">
98
+ <div class="center">
99
+  <img src="class_main_window.png" usemap="#MainWindow_map" alt=""/>
100
+  <map id="MainWindow_map" name="MainWindow_map">
101
+</map>
102
+ </div></div>
103
+<table class="memberdecls">
104
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
105
+Public Member Functions</h2></td></tr>
106
+<tr class="memitem:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b244be8b7b7db1b08de2a2acb9409db"></a>
107
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db">MainWindow</a> (QWidget *parent=0)</td></tr>
108
+<tr class="memdesc:a8b244be8b7b7db1b08de2a2acb9409db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default Constructor for the <a class="el" href="class_main_window.html">MainWindow</a>. <br /></td></tr>
109
+<tr class="separator:a8b244be8b7b7db1b08de2a2acb9409db"><td class="memSeparator" colspan="2">&#160;</td></tr>
110
+<tr class="memitem:a46f80e359e19d2aac22df1fce85f3bdc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46f80e359e19d2aac22df1fce85f3bdc"></a>
111
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc">MergeImages</a> (const QImage &amp;, const QImage &amp;, QImage &amp;, int, bool=false, int=0, int=0, int=0, int=0)</td></tr>
112
+<tr class="memdesc:a46f80e359e19d2aac22df1fce85f3bdc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Funcion that merges two images together. It takes an image with any background color and puts it in another image that will act as a background. (Implements Greenscreen techonology) <br /></td></tr>
113
+<tr class="separator:a46f80e359e19d2aac22df1fce85f3bdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
114
+<tr class="memitem:ae98d00a93bc118200eeef9f9bba1dba7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae98d00a93bc118200eeef9f9bba1dba7"></a>
115
+&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7">~MainWindow</a> ()</td></tr>
116
+<tr class="memdesc:ae98d00a93bc118200eeef9f9bba1dba7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor for the <a class="el" href="class_main_window.html">MainWindow</a>. <br /></td></tr>
117
+<tr class="separator:ae98d00a93bc118200eeef9f9bba1dba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
118
+</table><table class="memberdecls">
119
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-slots"></a>
120
+Private Slots</h2></td></tr>
121
+<tr class="memitem:a515c32e265a56100d4c8e6a7718aec38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a515c32e265a56100d4c8e6a7718aec38"></a>
122
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#a515c32e265a56100d4c8e6a7718aec38">on_ghostBox_clicked</a> ()</td></tr>
123
+<tr class="memdesc:a515c32e265a56100d4c8e6a7718aec38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Funtion that invokes the thresholdSlider function and creates a ghost version of the image with greenscreen background. <br /></td></tr>
124
+<tr class="separator:a515c32e265a56100d4c8e6a7718aec38"><td class="memSeparator" colspan="2">&#160;</td></tr>
125
+<tr class="memitem:a0f9a3a6f81784e420db099e1bb051475"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f9a3a6f81784e420db099e1bb051475"></a>
126
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#a0f9a3a6f81784e420db099e1bb051475">on_btnSelectImage_clicked</a> ()</td></tr>
127
+<tr class="memdesc:a0f9a3a6f81784e420db099e1bb051475"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display the file browsing window to load an image. (Green Background) <br /></td></tr>
128
+<tr class="separator:a0f9a3a6f81784e420db099e1bb051475"><td class="memSeparator" colspan="2">&#160;</td></tr>
129
+<tr class="memitem:ac0ab1a7707da7b053b36b869eb7711d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0ab1a7707da7b053b36b869eb7711d2"></a>
130
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2">on_btnSelectBackground_clicked</a> ()</td></tr>
131
+<tr class="memdesc:ac0ab1a7707da7b053b36b869eb7711d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display the file browsing window to load a background image. <br /></td></tr>
132
+<tr class="separator:ac0ab1a7707da7b053b36b869eb7711d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
133
+<tr class="memitem:a8ed5fa16d89ef45aa856b5cc4392a6d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ed5fa16d89ef45aa856b5cc4392a6d8"></a>
134
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8">on_btnMergeImages_clicked</a> ()</td></tr>
135
+<tr class="memdesc:a8ed5fa16d89ef45aa856b5cc4392a6d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invokes the function that merges the green screen image with the background image, then displays the merged image. <br /></td></tr>
136
+<tr class="separator:a8ed5fa16d89ef45aa856b5cc4392a6d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
137
+<tr class="memitem:ad495b5030e61fb55b8ab95c5a3a559d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad495b5030e61fb55b8ab95c5a3a559d6"></a>
138
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6">on_btnSaveImage_clicked</a> ()</td></tr>
139
+<tr class="memdesc:ad495b5030e61fb55b8ab95c5a3a559d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Displays the file browse window to choose the path to save the merged image in the file system. <br /></td></tr>
140
+<tr class="separator:ad495b5030e61fb55b8ab95c5a3a559d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
141
+<tr class="memitem:a1d0a4664de36d7b98928cb815aaf29b9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9">Mouse_Pressed</a> ()</td></tr>
142
+<tr class="memdesc:a1d0a4664de36d7b98928cb815aaf29b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function that gets the coordinates of the image with the greenscreen.  <a href="#a1d0a4664de36d7b98928cb815aaf29b9">More...</a><br /></td></tr>
143
+<tr class="separator:a1d0a4664de36d7b98928cb815aaf29b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
144
+<tr class="memitem:a0ff8f0c31c003b27896a579fdff5afad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ff8f0c31c003b27896a579fdff5afad"></a>
145
+void&#160;</td><td class="memItemRight" valign="bottom"><b>Mouse_PressedBackground</b> ()</td></tr>
146
+<tr class="separator:a0ff8f0c31c003b27896a579fdff5afad"><td class="memSeparator" colspan="2">&#160;</td></tr>
147
+<tr class="memitem:ad753a0e24a11fedfaeb6f3ba665749d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad753a0e24a11fedfaeb6f3ba665749d7"></a>
148
+void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7">on_thresholdSlider_actionTriggered</a> ()</td></tr>
149
+<tr class="memdesc:ad753a0e24a11fedfaeb6f3ba665749d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invokes the function that merges the green screen image with the background image. <br /></td></tr>
150
+<tr class="separator:ad753a0e24a11fedfaeb6f3ba665749d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
151
+</table><table class="memberdecls">
152
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
153
+Private Attributes</h2></td></tr>
154
+<tr class="memitem:a35466a70ed47252a0191168126a352a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35466a70ed47252a0191168126a352a5"></a>
155
+Ui::MainWindow *&#160;</td><td class="memItemRight" valign="bottom"><b>ui</b></td></tr>
156
+<tr class="separator:a35466a70ed47252a0191168126a352a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
157
+<tr class="memitem:a4e3a604a9d31eae583a1935b5694af3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e3a604a9d31eae583a1935b5694af3b"></a>
158
+QImage&#160;</td><td class="memItemRight" valign="bottom"><b>originalImage</b></td></tr>
159
+<tr class="separator:a4e3a604a9d31eae583a1935b5694af3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
160
+<tr class="memitem:a7901a775a7746ef814f04db64414568d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7901a775a7746ef814f04db64414568d"></a>
161
+QImage&#160;</td><td class="memItemRight" valign="bottom"><b>backgroundImage</b></td></tr>
162
+<tr class="separator:a7901a775a7746ef814f04db64414568d"><td class="memSeparator" colspan="2">&#160;</td></tr>
163
+<tr class="memitem:aa8eba166f2ef1f15dc3f5e3e9a5a315c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8eba166f2ef1f15dc3f5e3e9a5a315c"></a>
164
+QImage&#160;</td><td class="memItemRight" valign="bottom"><b>mergedImage</b></td></tr>
165
+<tr class="separator:aa8eba166f2ef1f15dc3f5e3e9a5a315c"><td class="memSeparator" colspan="2">&#160;</td></tr>
166
+</table>
167
+<h2 class="groupheader">Member Function Documentation</h2>
168
+<a class="anchor" id="a1d0a4664de36d7b98928cb815aaf29b9"></a>
169
+<div class="memitem">
170
+<div class="memproto">
171
+<table class="mlabels">
172
+  <tr>
173
+  <td class="mlabels-left">
174
+      <table class="memname">
175
+        <tr>
176
+          <td class="memname">void MainWindow::Mouse_Pressed </td>
177
+          <td>(</td>
178
+          <td class="paramname"></td><td>)</td>
179
+          <td></td>
180
+        </tr>
181
+      </table>
182
+  </td>
183
+  <td class="mlabels-right">
184
+<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span>  </td>
185
+  </tr>
186
+</table>
187
+</div><div class="memdoc">
188
+
189
+<p>Function that gets the coordinates of the image with the greenscreen. </p>
190
+<p>Function that gets the coordinaates of the image with the final background. </p>
191
+
192
+</div>
193
+</div>
194
+<hr/>The documentation for this class was generated from the following files:<ul>
195
+<li><a class="el" href="_merge_panel_8h_source.html">MergePanel.h</a></li>
196
+<li><a class="el" href="_filter_8cpp.html">Filter.cpp</a></li>
197
+<li>MergePanel.cpp</li>
198
+</ul>
199
+</div><!-- contents -->
200
+<!-- start footer part -->
201
+<hr class="footer"/><address class="footer"><small>
202
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
203
+<img class="footer" src="doxygen.png" alt="doxygen"/>
204
+</a> 1.8.9.1
205
+</small></address>
206
+</body>
207
+</html>

BIN
doc/en/html/class_main_window.png View File


+ 108
- 0
doc/en/html/classes.html View File

@@ -0,0 +1,108 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Class Index</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li class="current"><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+</div><!-- top -->
71
+<!-- window showing the filter options -->
72
+<div id="MSearchSelectWindow"
73
+     onmouseover="return searchBox.OnSearchSelectShow()"
74
+     onmouseout="return searchBox.OnSearchSelectHide()"
75
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
76
+</div>
77
+
78
+<!-- iframe showing the search results (closed by default) -->
79
+<div id="MSearchResultsWindow">
80
+<iframe src="javascript:void(0)" frameborder="0" 
81
+        name="MSearchResults" id="MSearchResults">
82
+</iframe>
83
+</div>
84
+
85
+<div class="header">
86
+  <div class="headertitle">
87
+<div class="title">Class Index</div>  </div>
88
+</div><!--header-->
89
+<div class="contents">
90
+<div class="qindex"><a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a></div>
91
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
92
+<tr><td rowspan="2" valign="bottom"><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;C&#160;&#160;</div></td></tr></table>
93
+</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;M&#160;&#160;</div></td></tr></table>
94
+</td><td></td></tr>
95
+<tr><td></td></tr>
96
+<tr><td valign="top"><a class="el" href="class_clickable_label.html">ClickableLabel</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_main_window.html">MainWindow</a>&#160;&#160;&#160;</td><td></td></tr>
97
+<tr><td></td><td></td><td></td></tr>
98
+</table>
99
+<div class="qindex"><a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a></div>
100
+</div><!-- contents -->
101
+<!-- start footer part -->
102
+<hr class="footer"/><address class="footer"><small>
103
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
104
+<img class="footer" src="doxygen.png" alt="doxygen"/>
105
+</a> 1.8.9.1
106
+</small></address>
107
+</body>
108
+</html>

BIN
doc/en/html/closed.png View File


BIN
doc/en/html/doc.png View File


+ 1449
- 0
doc/en/html/doxygen.css
File diff suppressed because it is too large
View File


BIN
doc/en/html/doxygen.png View File


+ 97
- 0
doc/en/html/dynsections.js View File

@@ -0,0 +1,97 @@
1
+function toggleVisibility(linkObj)
2
+{
3
+ var base = $(linkObj).attr('id');
4
+ var summary = $('#'+base+'-summary');
5
+ var content = $('#'+base+'-content');
6
+ var trigger = $('#'+base+'-trigger');
7
+ var src=$(trigger).attr('src');
8
+ if (content.is(':visible')===true) {
9
+   content.hide();
10
+   summary.show();
11
+   $(linkObj).addClass('closed').removeClass('opened');
12
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
13
+ } else {
14
+   content.show();
15
+   summary.hide();
16
+   $(linkObj).removeClass('closed').addClass('opened');
17
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
18
+ } 
19
+ return false;
20
+}
21
+
22
+function updateStripes()
23
+{
24
+  $('table.directory tr').
25
+       removeClass('even').filter(':visible:even').addClass('even');
26
+}
27
+
28
+function toggleLevel(level)
29
+{
30
+  $('table.directory tr').each(function() {
31
+    var l = this.id.split('_').length-1;
32
+    var i = $('#img'+this.id.substring(3));
33
+    var a = $('#arr'+this.id.substring(3));
34
+    if (l<level+1) {
35
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
36
+      a.html('&#9660;');
37
+      $(this).show();
38
+    } else if (l==level+1) {
39
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
40
+      a.html('&#9658;');
41
+      $(this).show();
42
+    } else {
43
+      $(this).hide();
44
+    }
45
+  });
46
+  updateStripes();
47
+}
48
+
49
+function toggleFolder(id)
50
+{
51
+  // the clicked row
52
+  var currentRow = $('#row_'+id);
53
+
54
+  // all rows after the clicked row
55
+  var rows = currentRow.nextAll("tr");
56
+
57
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
58
+
59
+  // only match elements AFTER this one (can't hide elements before)
60
+  var childRows = rows.filter(function() { return this.id.match(re); });
61
+
62
+  // first row is visible we are HIDING
63
+  if (childRows.filter(':first').is(':visible')===true) {
64
+    // replace down arrow by right arrow for current row
65
+    var currentRowSpans = currentRow.find("span");
66
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
67
+    currentRowSpans.filter(".arrow").html('&#9658;');
68
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
69
+  } else { // we are SHOWING
70
+    // replace right arrow by down arrow for current row
71
+    var currentRowSpans = currentRow.find("span");
72
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
73
+    currentRowSpans.filter(".arrow").html('&#9660;');
74
+    // replace down arrows by right arrows for child rows
75
+    var childRowsSpans = childRows.find("span");
76
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
77
+    childRowsSpans.filter(".arrow").html('&#9658;');
78
+    childRows.show(); //show all children
79
+  }
80
+  updateStripes();
81
+}
82
+
83
+
84
+function toggleInherit(id)
85
+{
86
+  var rows = $('tr.inherit.'+id);
87
+  var img = $('tr.inherit_header.'+id+' img');
88
+  var src = $(img).attr('src');
89
+  if (rows.filter(':first').is(':visible')===true) {
90
+    rows.css('display','none');
91
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
92
+  } else {
93
+    rows.css('display','table-row'); // using show() causes jump in firefox
94
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
95
+  }
96
+}
97
+

+ 102
- 0
doc/en/html/files.html View File

@@ -0,0 +1,102 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: File List</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
65
+    </ul>
66
+  </div>
67
+</div><!-- top -->
68
+<!-- window showing the filter options -->
69
+<div id="MSearchSelectWindow"
70
+     onmouseover="return searchBox.OnSearchSelectShow()"
71
+     onmouseout="return searchBox.OnSearchSelectHide()"
72
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
73
+</div>
74
+
75
+<!-- iframe showing the search results (closed by default) -->
76
+<div id="MSearchResultsWindow">
77
+<iframe src="javascript:void(0)" frameborder="0" 
78
+        name="MSearchResults" id="MSearchResults">
79
+</iframe>
80
+</div>
81
+
82
+<div class="header">
83
+  <div class="headertitle">
84
+<div class="title">File List</div>  </div>
85
+</div><!--header-->
86
+<div class="contents">
87
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
88
+<table class="directory">
89
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_clickable_label_8h_source.html"><span class="icondoc"></span></a><b>ClickableLabel.h</b></td><td class="desc"></td></tr>
90
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="_filter_8cpp.html" target="_self">Filter.cpp</a></td><td class="desc"></td></tr>
91
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_merge_panel_8h_source.html"><span class="icondoc"></span></a><b>MergePanel.h</b></td><td class="desc"></td></tr>
92
+</table>
93
+</div><!-- directory -->
94
+</div><!-- contents -->
95
+<!-- start footer part -->
96
+<hr class="footer"/><address class="footer"><small>
97
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
98
+<img class="footer" src="doxygen.png" alt="doxygen"/>
99
+</a> 1.8.9.1
100
+</small></address>
101
+</body>
102
+</html>

BIN
doc/en/html/folderclosed.png View File


BIN
doc/en/html/folderopen.png View File


+ 144
- 0
doc/en/html/functions.html View File

@@ -0,0 +1,144 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Class Members</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+  <div id="navrow3" class="tabs2">
71
+    <ul class="tablist">
72
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
73
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
74
+    </ul>
75
+  </div>
76
+</div><!-- top -->
77
+<!-- window showing the filter options -->
78
+<div id="MSearchSelectWindow"
79
+     onmouseover="return searchBox.OnSearchSelectShow()"
80
+     onmouseout="return searchBox.OnSearchSelectHide()"
81
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
82
+</div>
83
+
84
+<!-- iframe showing the search results (closed by default) -->
85
+<div id="MSearchResultsWindow">
86
+<iframe src="javascript:void(0)" frameborder="0" 
87
+        name="MSearchResults" id="MSearchResults">
88
+</iframe>
89
+</div>
90
+
91
+<div class="contents">
92
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div><ul>
93
+<li>ClickableLabel()
94
+: <a class="el" href="class_clickable_label.html#a62b23a9a7f7aed36692db03640561072">ClickableLabel</a>
95
+</li>
96
+<li>leaveEvent()
97
+: <a class="el" href="class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da">ClickableLabel</a>
98
+</li>
99
+<li>MainWindow()
100
+: <a class="el" href="class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db">MainWindow</a>
101
+</li>
102
+<li>MergeImages()
103
+: <a class="el" href="class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc">MainWindow</a>
104
+</li>
105
+<li>Mouse_Pressed()
106
+: <a class="el" href="class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9">MainWindow</a>
107
+</li>
108
+<li>mouseMoveEvent()
109
+: <a class="el" href="class_clickable_label.html#a6207e08167257d9a0505a219a659c53f">ClickableLabel</a>
110
+</li>
111
+<li>mousePressEvent()
112
+: <a class="el" href="class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b">ClickableLabel</a>
113
+</li>
114
+<li>on_btnMergeImages_clicked()
115
+: <a class="el" href="class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8">MainWindow</a>
116
+</li>
117
+<li>on_btnSaveImage_clicked()
118
+: <a class="el" href="class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6">MainWindow</a>
119
+</li>
120
+<li>on_btnSelectBackground_clicked()
121
+: <a class="el" href="class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2">MainWindow</a>
122
+</li>
123
+<li>on_btnSelectImage_clicked()
124
+: <a class="el" href="class_main_window.html#a0f9a3a6f81784e420db099e1bb051475">MainWindow</a>
125
+</li>
126
+<li>on_ghostBox_clicked()
127
+: <a class="el" href="class_main_window.html#a515c32e265a56100d4c8e6a7718aec38">MainWindow</a>
128
+</li>
129
+<li>on_thresholdSlider_actionTriggered()
130
+: <a class="el" href="class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7">MainWindow</a>
131
+</li>
132
+<li>~MainWindow()
133
+: <a class="el" href="class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7">MainWindow</a>
134
+</li>
135
+</ul>
136
+</div><!-- contents -->
137
+<!-- start footer part -->
138
+<hr class="footer"/><address class="footer"><small>
139
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
140
+<img class="footer" src="doxygen.png" alt="doxygen"/>
141
+</a> 1.8.9.1
142
+</small></address>
143
+</body>
144
+</html>

+ 144
- 0
doc/en/html/functions_func.html View File

@@ -0,0 +1,144 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Class Members - Functions</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li class="current"><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+  <div id="navrow3" class="tabs2">
71
+    <ul class="tablist">
72
+      <li><a href="functions.html"><span>All</span></a></li>
73
+      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
74
+    </ul>
75
+  </div>
76
+</div><!-- top -->
77
+<!-- window showing the filter options -->
78
+<div id="MSearchSelectWindow"
79
+     onmouseover="return searchBox.OnSearchSelectShow()"
80
+     onmouseout="return searchBox.OnSearchSelectHide()"
81
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
82
+</div>
83
+
84
+<!-- iframe showing the search results (closed by default) -->
85
+<div id="MSearchResultsWindow">
86
+<iframe src="javascript:void(0)" frameborder="0" 
87
+        name="MSearchResults" id="MSearchResults">
88
+</iframe>
89
+</div>
90
+
91
+<div class="contents">
92
+&#160;<ul>
93
+<li>ClickableLabel()
94
+: <a class="el" href="class_clickable_label.html#a62b23a9a7f7aed36692db03640561072">ClickableLabel</a>
95
+</li>
96
+<li>leaveEvent()
97
+: <a class="el" href="class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da">ClickableLabel</a>
98
+</li>
99
+<li>MainWindow()
100
+: <a class="el" href="class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db">MainWindow</a>
101
+</li>
102
+<li>MergeImages()
103
+: <a class="el" href="class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc">MainWindow</a>
104
+</li>
105
+<li>Mouse_Pressed()
106
+: <a class="el" href="class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9">MainWindow</a>
107
+</li>
108
+<li>mouseMoveEvent()
109
+: <a class="el" href="class_clickable_label.html#a6207e08167257d9a0505a219a659c53f">ClickableLabel</a>
110
+</li>
111
+<li>mousePressEvent()
112
+: <a class="el" href="class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b">ClickableLabel</a>
113
+</li>
114
+<li>on_btnMergeImages_clicked()
115
+: <a class="el" href="class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8">MainWindow</a>
116
+</li>
117
+<li>on_btnSaveImage_clicked()
118
+: <a class="el" href="class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6">MainWindow</a>
119
+</li>
120
+<li>on_btnSelectBackground_clicked()
121
+: <a class="el" href="class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2">MainWindow</a>
122
+</li>
123
+<li>on_btnSelectImage_clicked()
124
+: <a class="el" href="class_main_window.html#a0f9a3a6f81784e420db099e1bb051475">MainWindow</a>
125
+</li>
126
+<li>on_ghostBox_clicked()
127
+: <a class="el" href="class_main_window.html#a515c32e265a56100d4c8e6a7718aec38">MainWindow</a>
128
+</li>
129
+<li>on_thresholdSlider_actionTriggered()
130
+: <a class="el" href="class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7">MainWindow</a>
131
+</li>
132
+<li>~MainWindow()
133
+: <a class="el" href="class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7">MainWindow</a>
134
+</li>
135
+</ul>
136
+</div><!-- contents -->
137
+<!-- start footer part -->
138
+<hr class="footer"/><address class="footer"><small>
139
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
140
+<img class="footer" src="doxygen.png" alt="doxygen"/>
141
+</a> 1.8.9.1
142
+</small></address>
143
+</body>
144
+</html>

+ 106
- 0
doc/en/html/hierarchy.html View File

@@ -0,0 +1,106 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Class Hierarchy</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
65
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
66
+      <li class="current"><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
67
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
68
+    </ul>
69
+  </div>
70
+</div><!-- top -->
71
+<!-- window showing the filter options -->
72
+<div id="MSearchSelectWindow"
73
+     onmouseover="return searchBox.OnSearchSelectShow()"
74
+     onmouseout="return searchBox.OnSearchSelectHide()"
75
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
76
+</div>
77
+
78
+<!-- iframe showing the search results (closed by default) -->
79
+<div id="MSearchResultsWindow">
80
+<iframe src="javascript:void(0)" frameborder="0" 
81
+        name="MSearchResults" id="MSearchResults">
82
+</iframe>
83
+</div>
84
+
85
+<div class="header">
86
+  <div class="headertitle">
87
+<div class="title">Class Hierarchy</div>  </div>
88
+</div><!--header-->
89
+<div class="contents">
90
+<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
91
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
92
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>QLabel</b></td><td class="desc"></td></tr>
93
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_clickable_label.html" target="_self">ClickableLabel</a></td><td class="desc"></td></tr>
94
+<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>QMainWindow</b></td><td class="desc"></td></tr>
95
+<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_main_window.html" target="_self">MainWindow</a></td><td class="desc"></td></tr>
96
+</table>
97
+</div><!-- directory -->
98
+</div><!-- contents -->
99
+<!-- start footer part -->
100
+<hr class="footer"/><address class="footer"><small>
101
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
102
+<img class="footer" src="doxygen.png" alt="doxygen"/>
103
+</a> 1.8.9.1
104
+</small></address>
105
+</body>
106
+</html>

+ 90
- 0
doc/en/html/index.html View File

@@ -0,0 +1,90 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Main Page</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+</div><!-- top -->
63
+<!-- window showing the filter options -->
64
+<div id="MSearchSelectWindow"
65
+     onmouseover="return searchBox.OnSearchSelectShow()"
66
+     onmouseout="return searchBox.OnSearchSelectHide()"
67
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
68
+</div>
69
+
70
+<!-- iframe showing the search results (closed by default) -->
71
+<div id="MSearchResultsWindow">
72
+<iframe src="javascript:void(0)" frameborder="0" 
73
+        name="MSearchResults" id="MSearchResults">
74
+</iframe>
75
+</div>
76
+
77
+<div class="header">
78
+  <div class="headertitle">
79
+<div class="title">My Project Documentation</div>  </div>
80
+</div><!--header-->
81
+<div class="contents">
82
+</div><!-- contents -->
83
+<!-- start footer part -->
84
+<hr class="footer"/><address class="footer"><small>
85
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
86
+<img class="footer" src="doxygen.png" alt="doxygen"/>
87
+</a> 1.8.9.1
88
+</small></address>
89
+</body>
90
+</html>

+ 68
- 0
doc/en/html/jquery.js
File diff suppressed because it is too large
View File


+ 98
- 0
doc/en/html/namespace_ui.html View File

@@ -0,0 +1,98 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Ui Namespace Reference</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li><a href="namespaces.html"><span>Namespace&#160;List</span></a></li>
65
+    </ul>
66
+  </div>
67
+<!-- window showing the filter options -->
68
+<div id="MSearchSelectWindow"
69
+     onmouseover="return searchBox.OnSearchSelectShow()"
70
+     onmouseout="return searchBox.OnSearchSelectHide()"
71
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
72
+</div>
73
+
74
+<!-- iframe showing the search results (closed by default) -->
75
+<div id="MSearchResultsWindow">
76
+<iframe src="javascript:void(0)" frameborder="0" 
77
+        name="MSearchResults" id="MSearchResults">
78
+</iframe>
79
+</div>
80
+
81
+</div><!-- top -->
82
+<div class="header">
83
+  <div class="headertitle">
84
+<div class="title">Ui Namespace Reference</div>  </div>
85
+</div><!--header-->
86
+<div class="contents">
87
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
88
+<div class="textblock"><p>Main class for the program.</p>
89
+<p>This class contains the main functions for the program. There are functions for merging two images together, a function that creates a ghost version of the first image on the merge image, and the functions for the GUI. </p>
90
+</div></div><!-- contents -->
91
+<!-- start footer part -->
92
+<hr class="footer"/><address class="footer"><small>
93
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
94
+<img class="footer" src="doxygen.png" alt="doxygen"/>
95
+</a> 1.8.9.1
96
+</small></address>
97
+</body>
98
+</html>

+ 100
- 0
doc/en/html/namespaces.html View File

@@ -0,0 +1,100 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html xmlns="http://www.w3.org/1999/xhtml">
3
+<head>
4
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+<meta name="generator" content="Doxygen 1.8.9.1"/>
7
+<title>My Project: Namespace List</title>
8
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
9
+<script type="text/javascript" src="jquery.js"></script>
10
+<script type="text/javascript" src="dynsections.js"></script>
11
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
12
+<script type="text/javascript" src="search/searchdata.js"></script>
13
+<script type="text/javascript" src="search/search.js"></script>
14
+<script type="text/javascript">
15
+  $(document).ready(function() { init_search(); });
16
+</script>
17
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
18
+</head>
19
+<body>
20
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
21
+<div id="titlearea">
22
+<table cellspacing="0" cellpadding="0">
23
+ <tbody>
24
+ <tr style="height: 56px;">
25
+  <td style="padding-left: 0.5em;">
26
+   <div id="projectname">My Project
27
+   </div>
28
+  </td>
29
+ </tr>
30
+ </tbody>
31
+</table>
32
+</div>
33
+<!-- end header part -->
34
+<!-- Generated by Doxygen 1.8.9.1 -->
35
+<script type="text/javascript">
36
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
37
+</script>
38
+  <div id="navrow1" class="tabs">
39
+    <ul class="tablist">
40
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
41
+      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
42
+      <li><a href="annotated.html"><span>Classes</span></a></li>
43
+      <li><a href="files.html"><span>Files</span></a></li>
44
+      <li>
45
+        <div id="MSearchBox" class="MSearchBoxInactive">
46
+        <span class="left">
47
+          <img id="MSearchSelect" src="search/mag_sel.png"
48
+               onmouseover="return searchBox.OnSearchSelectShow()"
49
+               onmouseout="return searchBox.OnSearchSelectHide()"
50
+               alt=""/>
51
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
52
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
53
+               onblur="searchBox.OnSearchFieldFocus(false)" 
54
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
55
+          </span><span class="right">
56
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
57
+          </span>
58
+        </div>
59
+      </li>
60
+    </ul>
61
+  </div>
62
+  <div id="navrow2" class="tabs2">
63
+    <ul class="tablist">
64
+      <li class="current"><a href="namespaces.html"><span>Namespace&#160;List</span></a></li>
65
+    </ul>
66
+  </div>
67
+</div><!-- top -->
68
+<!-- window showing the filter options -->
69
+<div id="MSearchSelectWindow"
70
+     onmouseover="return searchBox.OnSearchSelectShow()"
71
+     onmouseout="return searchBox.OnSearchSelectHide()"
72
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
73
+</div>
74
+
75
+<!-- iframe showing the search results (closed by default) -->
76
+<div id="MSearchResultsWindow">
77
+<iframe src="javascript:void(0)" frameborder="0" 
78
+        name="MSearchResults" id="MSearchResults">
79
+</iframe>
80
+</div>
81
+
82
+<div class="header">
83
+  <div class="headertitle">
84
+<div class="title">Namespace List</div>  </div>
85
+</div><!--header-->
86
+<div class="contents">
87
+<div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><div class="directory">
88
+<table class="directory">
89
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespace_ui.html" target="_self">Ui</a></td><td class="desc"></td></tr>
90
+</table>
91
+</div><!-- directory -->
92
+</div><!-- contents -->
93
+<!-- start footer part -->
94
+<hr class="footer"/><address class="footer"><small>
95
+Generated on Fri Jun 12 2015 14:32:24 for My Project by &#160;<a href="http://www.doxygen.org/index.html">
96
+<img class="footer" src="doxygen.png" alt="doxygen"/>
97
+</a> 1.8.9.1
98
+</small></address>
99
+</body>
100
+</html>

BIN
doc/en/html/nav_f.png View File


BIN
doc/en/html/nav_g.png View File


BIN
doc/en/html/nav_h.png View File


BIN
doc/en/html/open.png View File


+ 26
- 0
doc/en/html/search/all_0.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="all_0.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/all_0.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['clickablelabel',['ClickableLabel',['../class_clickable_label.html',1,'ClickableLabel'],['../class_clickable_label.html#a62b23a9a7f7aed36692db03640561072',1,'ClickableLabel::ClickableLabel()']]]
4
+];

+ 26
- 0
doc/en/html/search/all_1.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="all_1.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/all_1.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['filter_2ecpp',['Filter.cpp',['../_filter_8cpp.html',1,'']]]
4
+];

+ 26
- 0
doc/en/html/search/all_2.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="all_2.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/all_2.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['leaveevent',['leaveEvent',['../class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da',1,'ClickableLabel']]]
4
+];

+ 26
- 0
doc/en/html/search/all_3.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="all_3.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 8
- 0
doc/en/html/search/all_3.js View File

@@ -0,0 +1,8 @@
1
+var searchData=
2
+[
3
+  ['mainwindow',['MainWindow',['../class_main_window.html',1,'MainWindow'],['../class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db',1,'MainWindow::MainWindow()']]],
4
+  ['mergeimages',['MergeImages',['../class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc',1,'MainWindow']]],
5
+  ['mouse_5fpressed',['Mouse_Pressed',['../class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9',1,'MainWindow']]],
6
+  ['mousemoveevent',['mouseMoveEvent',['../class_clickable_label.html#a6207e08167257d9a0505a219a659c53f',1,'ClickableLabel']]],
7
+  ['mousepressevent',['mousePressEvent',['../class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b',1,'ClickableLabel']]]
8
+];

+ 26
- 0
doc/en/html/search/all_4.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="all_4.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 9
- 0
doc/en/html/search/all_4.js View File

@@ -0,0 +1,9 @@
1
+var searchData=
2
+[
3
+  ['on_5fbtnmergeimages_5fclicked',['on_btnMergeImages_clicked',['../class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8',1,'MainWindow']]],
4
+  ['on_5fbtnsaveimage_5fclicked',['on_btnSaveImage_clicked',['../class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6',1,'MainWindow']]],
5
+  ['on_5fbtnselectbackground_5fclicked',['on_btnSelectBackground_clicked',['../class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2',1,'MainWindow']]],
6
+  ['on_5fbtnselectimage_5fclicked',['on_btnSelectImage_clicked',['../class_main_window.html#a0f9a3a6f81784e420db099e1bb051475',1,'MainWindow']]],
7
+  ['on_5fghostbox_5fclicked',['on_ghostBox_clicked',['../class_main_window.html#a515c32e265a56100d4c8e6a7718aec38',1,'MainWindow']]],
8
+  ['on_5fthresholdslider_5factiontriggered',['on_thresholdSlider_actionTriggered',['../class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7',1,'MainWindow']]]
9
+];

+ 26
- 0
doc/en/html/search/all_5.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="all_5.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/all_5.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['ui',['Ui',['../namespace_ui.html',1,'']]]
4
+];

+ 26
- 0
doc/en/html/search/all_6.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="all_6.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/all_6.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['_7emainwindow',['~MainWindow',['../class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7',1,'MainWindow']]]
4
+];

+ 26
- 0
doc/en/html/search/classes_0.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="classes_0.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/classes_0.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['clickablelabel',['ClickableLabel',['../class_clickable_label.html',1,'']]]
4
+];

+ 26
- 0
doc/en/html/search/classes_1.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="classes_1.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/classes_1.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['mainwindow',['MainWindow',['../class_main_window.html',1,'']]]
4
+];

BIN
doc/en/html/search/close.png View File


+ 26
- 0
doc/en/html/search/files_0.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="files_0.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/files_0.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['filter_2ecpp',['Filter.cpp',['../_filter_8cpp.html',1,'']]]
4
+];

+ 26
- 0
doc/en/html/search/functions_0.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="functions_0.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/functions_0.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['clickablelabel',['ClickableLabel',['../class_clickable_label.html#a62b23a9a7f7aed36692db03640561072',1,'ClickableLabel']]]
4
+];

+ 26
- 0
doc/en/html/search/functions_1.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="functions_1.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/functions_1.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['leaveevent',['leaveEvent',['../class_clickable_label.html#ad884c3cdc7a6c16af19143e84c79b5da',1,'ClickableLabel']]]
4
+];

+ 26
- 0
doc/en/html/search/functions_2.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="functions_2.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 8
- 0
doc/en/html/search/functions_2.js View File

@@ -0,0 +1,8 @@
1
+var searchData=
2
+[
3
+  ['mainwindow',['MainWindow',['../class_main_window.html#a8b244be8b7b7db1b08de2a2acb9409db',1,'MainWindow']]],
4
+  ['mergeimages',['MergeImages',['../class_main_window.html#a46f80e359e19d2aac22df1fce85f3bdc',1,'MainWindow']]],
5
+  ['mouse_5fpressed',['Mouse_Pressed',['../class_main_window.html#a1d0a4664de36d7b98928cb815aaf29b9',1,'MainWindow']]],
6
+  ['mousemoveevent',['mouseMoveEvent',['../class_clickable_label.html#a6207e08167257d9a0505a219a659c53f',1,'ClickableLabel']]],
7
+  ['mousepressevent',['mousePressEvent',['../class_clickable_label.html#adfec8a6c2ddd87b673f3a734ea6afa2b',1,'ClickableLabel']]]
8
+];

+ 26
- 0
doc/en/html/search/functions_3.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="functions_3.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 9
- 0
doc/en/html/search/functions_3.js View File

@@ -0,0 +1,9 @@
1
+var searchData=
2
+[
3
+  ['on_5fbtnmergeimages_5fclicked',['on_btnMergeImages_clicked',['../class_main_window.html#a8ed5fa16d89ef45aa856b5cc4392a6d8',1,'MainWindow']]],
4
+  ['on_5fbtnsaveimage_5fclicked',['on_btnSaveImage_clicked',['../class_main_window.html#ad495b5030e61fb55b8ab95c5a3a559d6',1,'MainWindow']]],
5
+  ['on_5fbtnselectbackground_5fclicked',['on_btnSelectBackground_clicked',['../class_main_window.html#ac0ab1a7707da7b053b36b869eb7711d2',1,'MainWindow']]],
6
+  ['on_5fbtnselectimage_5fclicked',['on_btnSelectImage_clicked',['../class_main_window.html#a0f9a3a6f81784e420db099e1bb051475',1,'MainWindow']]],
7
+  ['on_5fghostbox_5fclicked',['on_ghostBox_clicked',['../class_main_window.html#a515c32e265a56100d4c8e6a7718aec38',1,'MainWindow']]],
8
+  ['on_5fthresholdslider_5factiontriggered',['on_thresholdSlider_actionTriggered',['../class_main_window.html#ad753a0e24a11fedfaeb6f3ba665749d7',1,'MainWindow']]]
9
+];

+ 26
- 0
doc/en/html/search/functions_4.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="functions_4.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/functions_4.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['_7emainwindow',['~MainWindow',['../class_main_window.html#ae98d00a93bc118200eeef9f9bba1dba7',1,'MainWindow']]]
4
+];

BIN
doc/en/html/search/mag_sel.png View File


+ 26
- 0
doc/en/html/search/namespaces_0.html View File

@@ -0,0 +1,26 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<meta name="generator" content="Doxygen 1.8.9.1"/>
5
+<link rel="stylesheet" type="text/css" href="search.css"/>
6
+<script type="text/javascript" src="namespaces_0.js"></script>
7
+<script type="text/javascript" src="search.js"></script>
8
+</head>
9
+<body class="SRPage">
10
+<div id="SRIndex">
11
+<div class="SRStatus" id="Loading">Loading...</div>
12
+<div id="SRResults"></div>
13
+<script type="text/javascript"><!--
14
+createResults();
15
+--></script>
16
+<div class="SRStatus" id="Searching">Searching...</div>
17
+<div class="SRStatus" id="NoMatches">No Matches</div>
18
+<script type="text/javascript"><!--
19
+document.getElementById("Loading").style.display="none";
20
+document.getElementById("NoMatches").style.display="none";
21
+var searchResults = new SearchResults("searchResults");
22
+searchResults.Search();
23
+--></script>
24
+</div>
25
+</body>
26
+</html>

+ 4
- 0
doc/en/html/search/namespaces_0.js View File

@@ -0,0 +1,4 @@
1
+var searchData=
2
+[
3
+  ['ui',['Ui',['../namespace_ui.html',1,'']]]
4
+];

+ 12
- 0
doc/en/html/search/nomatches.html View File

@@ -0,0 +1,12 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+<html><head><title></title>
3
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
+<link rel="stylesheet" type="text/css" href="search.css"/>
5
+<script type="text/javascript" src="search.js"></script>
6
+</head>
7
+<body class="SRPage">
8
+<div id="SRIndex">
9
+<div class="SRStatus" id="NoMatches">No Matches</div>
10
+</div>
11
+</body>
12
+</html>

+ 271
- 0
doc/en/html/search/search.css View File

@@ -0,0 +1,271 @@
1
+/*---------------- Search Box */
2
+
3
+#FSearchBox {
4
+    float: left;
5
+}
6
+
7
+#MSearchBox {
8
+    white-space : nowrap;
9
+    position: absolute;
10
+    float: none;
11
+    display: inline;
12
+    margin-top: 8px;
13
+    right: 0px;
14
+    width: 170px;
15
+    z-index: 102;
16
+    background-color: white;
17
+}
18
+
19
+#MSearchBox .left
20
+{
21
+    display:block;
22
+    position:absolute;
23
+    left:10px;
24
+    width:20px;
25
+    height:19px;
26
+    background:url('search_l.png') no-repeat;
27
+    background-position:right;
28
+}
29
+
30
+#MSearchSelect {
31
+    display:block;
32
+    position:absolute;
33
+    width:20px;
34
+    height:19px;
35
+}
36
+
37
+.left #MSearchSelect {
38
+    left:4px;
39
+}
40
+
41
+.right #MSearchSelect {
42
+    right:5px;
43
+}
44
+
45
+#MSearchField {
46
+    display:block;
47
+    position:absolute;
48
+    height:19px;
49
+    background:url('search_m.png') repeat-x;
50
+    border:none;
51
+    width:111px;
52
+    margin-left:20px;
53
+    padding-left:4px;
54
+    color: #909090;
55
+    outline: none;
56
+    font: 9pt Arial, Verdana, sans-serif;
57
+}
58
+
59
+#FSearchBox #MSearchField {
60
+    margin-left:15px;
61
+}
62
+
63
+#MSearchBox .right {
64
+    display:block;
65
+    position:absolute;
66
+    right:10px;
67
+    top:0px;
68
+    width:20px;
69
+    height:19px;
70
+    background:url('search_r.png') no-repeat;
71
+    background-position:left;
72
+}
73
+
74
+#MSearchClose {
75
+    display: none;
76
+    position: absolute;
77
+    top: 4px;
78
+    background : none;
79
+    border: none;
80
+    margin: 0px 4px 0px 0px;
81
+    padding: 0px 0px;
82
+    outline: none;
83
+}
84
+
85
+.left #MSearchClose {
86
+    left: 6px;
87
+}
88
+
89
+.right #MSearchClose {
90
+    right: 2px;
91
+}
92
+
93
+.MSearchBoxActive #MSearchField {
94
+    color: #000000;
95
+}
96
+
97
+/*---------------- Search filter selection */
98
+
99
+#MSearchSelectWindow {
100
+    display: none;
101
+    position: absolute;
102
+    left: 0; top: 0;
103
+    border: 1px solid #90A5CE;
104
+    background-color: #F9FAFC;
105
+    z-index: 1;
106
+    padding-top: 4px;
107
+    padding-bottom: 4px;
108
+    -moz-border-radius: 4px;
109
+    -webkit-border-top-left-radius: 4px;
110
+    -webkit-border-top-right-radius: 4px;
111
+    -webkit-border-bottom-left-radius: 4px;
112
+    -webkit-border-bottom-right-radius: 4px;
113
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
114
+}
115
+
116
+.SelectItem {
117
+    font: 8pt Arial, Verdana, sans-serif;
118
+    padding-left:  2px;
119
+    padding-right: 12px;
120
+    border: 0px;
121
+}
122
+
123
+span.SelectionMark {
124
+    margin-right: 4px;
125
+    font-family: monospace;
126
+    outline-style: none;
127
+    text-decoration: none;
128
+}
129
+
130
+a.SelectItem {
131
+    display: block;
132
+    outline-style: none;
133
+    color: #000000; 
134
+    text-decoration: none;
135
+    padding-left:   6px;
136
+    padding-right: 12px;
137
+}
138
+
139
+a.SelectItem:focus,
140
+a.SelectItem:active {
141
+    color: #000000; 
142
+    outline-style: none;
143
+    text-decoration: none;
144
+}
145
+
146
+a.SelectItem:hover {
147
+    color: #FFFFFF;
148
+    background-color: #3D578C;
149
+    outline-style: none;
150
+    text-decoration: none;
151
+    cursor: pointer;
152
+    display: block;
153
+}
154
+
155
+/*---------------- Search results window */
156
+
157
+iframe#MSearchResults {
158
+    width: 60ex;
159
+    height: 15em;
160
+}
161
+
162
+#MSearchResultsWindow {
163
+    display: none;
164
+    position: absolute;
165
+    left: 0; top: 0;
166
+    border: 1px solid #000;
167
+    background-color: #EEF1F7;
168
+}
169
+
170
+/* ----------------------------------- */
171
+
172
+
173
+#SRIndex {
174
+    clear:both; 
175
+    padding-bottom: 15px;
176
+}
177
+
178
+.SREntry {
179
+    font-size: 10pt;
180
+    padding-left: 1ex;
181
+}
182
+
183
+.SRPage .SREntry {
184
+    font-size: 8pt;
185
+    padding: 1px 5px;
186
+}
187
+
188
+body.SRPage {
189
+    margin: 5px 2px;
190
+}
191
+
192
+.SRChildren {
193
+    padding-left: 3ex; padding-bottom: .5em 
194
+}
195
+
196
+.SRPage .SRChildren {
197
+    display: none;
198
+}
199
+
200
+.SRSymbol {
201
+    font-weight: bold; 
202
+    color: #425E97;
203
+    font-family: Arial, Verdana, sans-serif;
204
+    text-decoration: none;
205
+    outline: none;
206
+}
207
+
208
+a.SRScope {
209
+    display: block;
210
+    color: #425E97; 
211
+    font-family: Arial, Verdana, sans-serif;
212
+    text-decoration: none;
213
+    outline: none;
214
+}
215
+
216
+a.SRSymbol:focus, a.SRSymbol:active,
217
+a.SRScope:focus, a.SRScope:active {
218
+    text-decoration: underline;
219
+}
220
+
221
+span.SRScope {
222
+    padding-left: 4px;
223
+}
224
+
225
+.SRPage .SRStatus {
226
+    padding: 2px 5px;
227
+    font-size: 8pt;
228
+    font-style: italic;
229
+}
230
+
231
+.SRResult {
232
+    display: none;
233
+}
234
+
235
+DIV.searchresults {
236
+    margin-left: 10px;
237
+    margin-right: 10px;
238
+}
239
+
240
+/*---------------- External search page results */
241
+
242
+.searchresult {
243
+    background-color: #F0F3F8;
244
+}
245
+
246
+.pages b {
247
+   color: white;
248
+   padding: 5px 5px 3px 5px;
249
+   background-image: url("../tab_a.png");
250
+   background-repeat: repeat-x;
251
+   text-shadow: 0 1px 1px #000000;
252
+}
253
+
254
+.pages {
255
+    line-height: 17px;
256
+    margin-left: 4px;
257
+    text-decoration: none;
258
+}
259
+
260
+.hl {
261
+    font-weight: bold;
262
+}
263
+
264
+#searchresults {
265
+    margin-bottom: 20px;
266
+}
267
+
268
+.searchpages {
269
+    margin-top: 10px;
270
+}
271
+

+ 791
- 0
doc/en/html/search/search.js View File

@@ -0,0 +1,791 @@
1
+function convertToId(search)
2
+{
3
+  var result = '';
4
+  for (i=0;i<search.length;i++)
5
+  {
6
+    var c = search.charAt(i);
7
+    var cn = c.charCodeAt(0);
8
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
9
+    {
10
+      result+=c;
11
+    }
12
+    else if (cn<16)
13
+    {
14
+      result+="_0"+cn.toString(16);
15
+    }
16
+    else
17
+    {
18
+      result+="_"+cn.toString(16);
19
+    }
20
+  }
21
+  return result;
22
+}
23
+
24
+function getXPos(item)
25
+{
26
+  var x = 0;
27
+  if (item.offsetWidth)
28
+  {
29
+    while (item && item!=document.body)
30
+    {
31
+      x   += item.offsetLeft;
32
+      item = item.offsetParent;
33
+    }
34
+  }
35
+  return x;
36
+}
37
+
38
+function getYPos(item)
39
+{
40
+  var y = 0;
41
+  if (item.offsetWidth)
42
+  {
43
+     while (item && item!=document.body)
44
+     {
45
+       y   += item.offsetTop;
46
+       item = item.offsetParent;
47
+     }
48
+  }
49
+  return y;
50
+}
51
+
52
+/* A class handling everything associated with the search panel.
53
+
54
+   Parameters:
55
+   name - The name of the global variable that will be
56
+          storing this instance.  Is needed to be able to set timeouts.
57
+   resultPath - path to use for external files
58
+*/
59
+function SearchBox(name, resultsPath, inFrame, label)
60
+{
61
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
62
+
63
+  // ---------- Instance variables
64
+  this.name                  = name;
65
+  this.resultsPath           = resultsPath;
66
+  this.keyTimeout            = 0;
67
+  this.keyTimeoutLength      = 500;
68
+  this.closeSelectionTimeout = 300;
69
+  this.lastSearchValue       = "";
70
+  this.lastResultsPage       = "";
71
+  this.hideTimeout           = 0;
72
+  this.searchIndex           = 0;
73
+  this.searchActive          = false;
74
+  this.insideFrame           = inFrame;
75
+  this.searchLabel           = label;
76
+
77
+  // ----------- DOM Elements
78
+
79
+  this.DOMSearchField = function()
80
+  {  return document.getElementById("MSearchField");  }
81
+
82
+  this.DOMSearchSelect = function()
83
+  {  return document.getElementById("MSearchSelect");  }
84
+
85
+  this.DOMSearchSelectWindow = function()
86
+  {  return document.getElementById("MSearchSelectWindow");  }
87
+
88
+  this.DOMPopupSearchResults = function()
89
+  {  return document.getElementById("MSearchResults");  }
90
+
91
+  this.DOMPopupSearchResultsWindow = function()
92
+  {  return document.getElementById("MSearchResultsWindow");  }
93
+
94
+  this.DOMSearchClose = function()
95
+  {  return document.getElementById("MSearchClose"); }
96
+
97
+  this.DOMSearchBox = function()
98
+  {  return document.getElementById("MSearchBox");  }
99
+
100
+  // ------------ Event Handlers
101
+
102
+  // Called when focus is added or removed from the search field.
103
+  this.OnSearchFieldFocus = function(isActive)
104
+  {
105
+    this.Activate(isActive);
106
+  }
107
+
108
+  this.OnSearchSelectShow = function()
109
+  {
110
+    var searchSelectWindow = this.DOMSearchSelectWindow();
111
+    var searchField        = this.DOMSearchSelect();
112
+
113
+    if (this.insideFrame)
114
+    {
115
+      var left = getXPos(searchField);
116
+      var top  = getYPos(searchField);
117
+      left += searchField.offsetWidth + 6;
118
+      top += searchField.offsetHeight;
119
+
120
+      // show search selection popup
121
+      searchSelectWindow.style.display='block';
122
+      left -= searchSelectWindow.offsetWidth;
123
+      searchSelectWindow.style.left =  left + 'px';
124
+      searchSelectWindow.style.top  =  top  + 'px';
125
+    }
126
+    else
127
+    {
128
+      var left = getXPos(searchField);
129
+      var top  = getYPos(searchField);
130
+      top += searchField.offsetHeight;
131
+
132
+      // show search selection popup
133
+      searchSelectWindow.style.display='block';
134
+      searchSelectWindow.style.left =  left + 'px';
135
+      searchSelectWindow.style.top  =  top  + 'px';
136
+    }
137
+
138
+    // stop selection hide timer
139
+    if (this.hideTimeout)
140
+    {
141
+      clearTimeout(this.hideTimeout);
142
+      this.hideTimeout=0;
143
+    }
144
+    return false; // to avoid "image drag" default event
145
+  }
146
+
147
+  this.OnSearchSelectHide = function()
148
+  {
149
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
150
+                                  this.closeSelectionTimeout);
151
+  }
152
+
153
+  // Called when the content of the search field is changed.
154
+  this.OnSearchFieldChange = function(evt)
155
+  {
156
+    if (this.keyTimeout) // kill running timer
157
+    {
158
+      clearTimeout(this.keyTimeout);
159
+      this.keyTimeout = 0;
160
+    }
161
+
162
+    var e  = (evt) ? evt : window.event; // for IE
163
+    if (e.keyCode==40 || e.keyCode==13)
164
+    {
165
+      if (e.shiftKey==1)
166
+      {
167
+        this.OnSearchSelectShow();
168
+        var win=this.DOMSearchSelectWindow();
169
+        for (i=0;i<win.childNodes.length;i++)
170
+        {
171
+          var child = win.childNodes[i]; // get span within a
172
+          if (child.className=='SelectItem')
173
+          {
174
+            child.focus();
175
+            return;
176
+          }
177
+        }
178
+        return;
179
+      }
180
+      else if (window.frames.MSearchResults.searchResults)
181
+      {
182
+        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
183
+        if (elem) elem.focus();
184
+      }
185
+    }
186
+    else if (e.keyCode==27) // Escape out of the search field
187
+    {
188
+      this.DOMSearchField().blur();
189
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
190
+      this.DOMSearchClose().style.display = 'none';
191
+      this.lastSearchValue = '';
192
+      this.Activate(false);
193
+      return;
194
+    }
195
+
196
+    // strip whitespaces
197
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
198
+
199
+    if (searchValue != this.lastSearchValue) // search value has changed
200
+    {
201
+      if (searchValue != "") // non-empty search
202
+      {
203
+        // set timer for search update
204
+        this.keyTimeout = setTimeout(this.name + '.Search()',
205
+                                     this.keyTimeoutLength);
206
+      }
207
+      else // empty search field
208
+      {
209
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
210
+        this.DOMSearchClose().style.display = 'none';
211
+        this.lastSearchValue = '';
212
+      }
213
+    }
214
+  }
215
+
216
+  this.SelectItemCount = function(id)
217
+  {
218
+    var count=0;
219
+    var win=this.DOMSearchSelectWindow();
220
+    for (i=0;i<win.childNodes.length;i++)
221
+    {
222
+      var child = win.childNodes[i]; // get span within a
223
+      if (child.className=='SelectItem')
224
+      {
225
+        count++;
226
+      }
227
+    }
228
+    return count;
229
+  }
230
+
231
+  this.SelectItemSet = function(id)
232
+  {
233
+    var i,j=0;
234
+    var win=this.DOMSearchSelectWindow();
235
+    for (i=0;i<win.childNodes.length;i++)
236
+    {
237
+      var child = win.childNodes[i]; // get span within a
238
+      if (child.className=='SelectItem')
239
+      {
240
+        var node = child.firstChild;
241
+        if (j==id)
242
+        {
243
+          node.innerHTML='&#8226;';
244
+        }
245
+        else
246
+        {
247
+          node.innerHTML='&#160;';
248
+        }
249
+        j++;
250
+      }
251
+    }
252
+  }
253
+
254
+  // Called when an search filter selection is made.
255
+  // set item with index id as the active item
256
+  this.OnSelectItem = function(id)
257
+  {
258
+    this.searchIndex = id;
259
+    this.SelectItemSet(id);
260
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
261
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
262
+    {
263
+      this.Search();
264
+    }
265
+  }
266
+
267
+  this.OnSearchSelectKey = function(evt)
268
+  {
269
+    var e = (evt) ? evt : window.event; // for IE
270
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
271
+    {
272
+      this.searchIndex++;
273
+      this.OnSelectItem(this.searchIndex);
274
+    }
275
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
276
+    {
277
+      this.searchIndex--;
278
+      this.OnSelectItem(this.searchIndex);
279
+    }
280
+    else if (e.keyCode==13 || e.keyCode==27)
281
+    {
282
+      this.OnSelectItem(this.searchIndex);
283
+      this.CloseSelectionWindow();
284
+      this.DOMSearchField().focus();
285
+    }
286
+    return false;
287
+  }
288
+
289
+  // --------- Actions
290
+
291
+  // Closes the results window.
292
+  this.CloseResultsWindow = function()
293
+  {
294
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
295
+    this.DOMSearchClose().style.display = 'none';
296
+    this.Activate(false);
297
+  }
298
+
299
+  this.CloseSelectionWindow = function()
300
+  {
301
+    this.DOMSearchSelectWindow().style.display = 'none';
302
+  }
303
+
304
+  // Performs a search.
305
+  this.Search = function()
306
+  {
307
+    this.keyTimeout = 0;
308
+
309
+    // strip leading whitespace
310
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
311
+
312
+    var code = searchValue.toLowerCase().charCodeAt(0);
313
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
314
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
315
+    {
316
+      idxChar = searchValue.substr(0, 2);
317
+    }
318
+
319
+    var resultsPage;
320
+    var resultsPageWithSearch;
321
+    var hasResultsPage;
322
+
323
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
324
+    if (idx!=-1)
325
+    {
326
+       var hexCode=idx.toString(16);
327
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
328
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
329
+       hasResultsPage = true;
330
+    }
331
+    else // nothing available for this search term
332
+    {
333
+       resultsPage = this.resultsPath + '/nomatches.html';
334
+       resultsPageWithSearch = resultsPage;
335
+       hasResultsPage = false;
336
+    }
337
+
338
+    window.frames.MSearchResults.location = resultsPageWithSearch;
339
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
340
+
341
+    if (domPopupSearchResultsWindow.style.display!='block')
342
+    {
343
+       var domSearchBox = this.DOMSearchBox();
344
+       this.DOMSearchClose().style.display = 'inline';
345
+       if (this.insideFrame)
346
+       {
347
+         var domPopupSearchResults = this.DOMPopupSearchResults();
348
+         domPopupSearchResultsWindow.style.position = 'relative';
349
+         domPopupSearchResultsWindow.style.display  = 'block';
350
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
351
+         domPopupSearchResultsWindow.style.width    = width + 'px';
352
+         domPopupSearchResults.style.width          = width + 'px';
353
+       }
354
+       else
355
+       {
356
+         var domPopupSearchResults = this.DOMPopupSearchResults();
357
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
358
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
359
+         domPopupSearchResultsWindow.style.display = 'block';
360
+         left -= domPopupSearchResults.offsetWidth;
361
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
362
+         domPopupSearchResultsWindow.style.left    = left + 'px';
363
+       }
364
+    }
365
+
366
+    this.lastSearchValue = searchValue;
367
+    this.lastResultsPage = resultsPage;
368
+  }
369
+
370
+  // -------- Activation Functions
371
+
372
+  // Activates or deactivates the search panel, resetting things to
373
+  // their default values if necessary.
374
+  this.Activate = function(isActive)
375
+  {
376
+    if (isActive || // open it
377
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
378
+       )
379
+    {
380
+      this.DOMSearchBox().className = 'MSearchBoxActive';
381
+
382
+      var searchField = this.DOMSearchField();
383
+
384
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
385
+      {
386
+        searchField.value = '';
387
+        this.searchActive = true;
388
+      }
389
+    }
390
+    else if (!isActive) // directly remove the panel
391
+    {
392
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
393
+      this.DOMSearchField().value   = this.searchLabel;
394
+      this.searchActive             = false;
395
+      this.lastSearchValue          = ''
396
+      this.lastResultsPage          = '';
397
+    }
398
+  }
399
+}
400
+
401
+// -----------------------------------------------------------------------
402
+
403
+// The class that handles everything on the search results page.
404
+function SearchResults(name)
405
+{
406
+    // The number of matches from the last run of <Search()>.
407
+    this.lastMatchCount = 0;
408
+    this.lastKey = 0;
409
+    this.repeatOn = false;
410
+
411
+    // Toggles the visibility of the passed element ID.
412
+    this.FindChildElement = function(id)
413
+    {
414
+      var parentElement = document.getElementById(id);
415
+      var element = parentElement.firstChild;
416
+
417
+      while (element && element!=parentElement)
418
+      {
419
+        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
420
+        {
421
+          return element;
422
+        }
423
+
424
+        if (element.nodeName == 'DIV' && element.hasChildNodes())
425
+        {
426
+           element = element.firstChild;
427
+        }
428
+        else if (element.nextSibling)
429
+        {
430
+           element = element.nextSibling;
431
+        }
432
+        else
433
+        {
434
+          do
435
+          {
436
+            element = element.parentNode;
437
+          }
438
+          while (element && element!=parentElement && !element.nextSibling);
439
+
440
+          if (element && element!=parentElement)
441
+          {
442
+            element = element.nextSibling;
443
+          }
444
+        }
445
+      }
446
+    }
447
+
448
+    this.Toggle = function(id)
449
+    {
450
+      var element = this.FindChildElement(id);
451
+      if (element)
452
+      {
453
+        if (element.style.display == 'block')
454
+        {
455
+          element.style.display = 'none';
456
+        }
457
+        else
458
+        {
459
+          element.style.display = 'block';
460
+        }
461
+      }
462
+    }
463
+
464
+    // Searches for the passed string.  If there is no parameter,
465
+    // it takes it from the URL query.
466
+    //
467
+    // Always returns true, since other documents may try to call it
468
+    // and that may or may not be possible.
469
+    this.Search = function(search)
470
+    {
471
+      if (!search) // get search word from URL
472
+      {
473
+        search = window.location.search;
474
+        search = search.substring(1);  // Remove the leading '?'
475
+        search = unescape(search);
476
+      }
477
+
478
+      search = search.replace(/^ +/, ""); // strip leading spaces
479
+      search = search.replace(/ +$/, ""); // strip trailing spaces
480
+      search = search.toLowerCase();
481
+      search = convertToId(search);
482
+
483
+      var resultRows = document.getElementsByTagName("div");
484
+      var matches = 0;
485
+
486
+      var i = 0;
487
+      while (i < resultRows.length)
488
+      {
489
+        var row = resultRows.item(i);
490
+        if (row.className == "SRResult")
491
+        {
492
+          var rowMatchName = row.id.toLowerCase();
493
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
494
+
495
+          if (search.length<=rowMatchName.length &&
496
+             rowMatchName.substr(0, search.length)==search)
497
+          {
498
+            row.style.display = 'block';
499
+            matches++;
500
+          }
501
+          else
502
+          {
503
+            row.style.display = 'none';
504
+          }
505
+        }
506
+        i++;
507
+      }
508
+      document.getElementById("Searching").style.display='none';
509
+      if (matches == 0) // no results
510
+      {
511
+        document.getElementById("NoMatches").style.display='block';
512
+      }
513
+      else // at least one result
514
+      {
515
+        document.getElementById("NoMatches").style.display='none';
516
+      }
517
+      this.lastMatchCount = matches;
518
+      return true;
519
+    }
520
+
521
+    // return the first item with index index or higher that is visible
522
+    this.NavNext = function(index)
523
+    {
524
+      var focusItem;
525
+      while (1)
526
+      {
527
+        var focusName = 'Item'+index;
528
+        focusItem = document.getElementById(focusName);
529
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
530
+        {
531
+          break;
532
+        }
533
+        else if (!focusItem) // last element
534
+        {
535
+          break;
536
+        }
537
+        focusItem=null;
538
+        index++;
539
+      }
540
+      return focusItem;
541
+    }
542
+
543
+    this.NavPrev = function(index)
544
+    {
545
+      var focusItem;
546
+      while (1)
547
+      {
548
+        var focusName = 'Item'+index;
549
+        focusItem = document.getElementById(focusName);
550
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
551
+        {
552
+          break;
553
+        }
554
+        else if (!focusItem) // last element
555
+        {
556
+          break;
557
+        }
558
+        focusItem=null;
559
+        index--;
560
+      }
561
+      return focusItem;
562
+    }
563
+
564
+    this.ProcessKeys = function(e)
565
+    {
566
+      if (e.type == "keydown")
567
+      {
568
+        this.repeatOn = false;
569
+        this.lastKey = e.keyCode;
570
+      }
571
+      else if (e.type == "keypress")
572
+      {
573
+        if (!this.repeatOn)
574
+        {
575
+          if (this.lastKey) this.repeatOn = true;
576
+          return false; // ignore first keypress after keydown
577
+        }
578
+      }
579
+      else if (e.type == "keyup")
580
+      {
581
+        this.lastKey = 0;
582
+        this.repeatOn = false;
583
+      }
584
+      return this.lastKey!=0;
585
+    }
586
+
587
+    this.Nav = function(evt,itemIndex)
588
+    {
589
+      var e  = (evt) ? evt : window.event; // for IE
590
+      if (e.keyCode==13) return true;
591
+      if (!this.ProcessKeys(e)) return false;
592
+
593
+      if (this.lastKey==38) // Up
594
+      {
595
+        var newIndex = itemIndex-1;
596
+        var focusItem = this.NavPrev(newIndex);
597
+        if (focusItem)
598
+        {
599
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
600
+          if (child && child.style.display == 'block') // children visible
601
+          {
602
+            var n=0;
603
+            var tmpElem;
604
+            while (1) // search for last child
605
+            {
606
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
607
+              if (tmpElem)
608
+              {
609
+                focusItem = tmpElem;
610
+              }
611
+              else // found it!
612
+              {
613
+                break;
614
+              }
615
+              n++;
616
+            }
617
+          }
618
+        }
619
+        if (focusItem)
620
+        {
621
+          focusItem.focus();
622
+        }
623
+        else // return focus to search field
624
+        {
625
+           parent.document.getElementById("MSearchField").focus();
626
+        }
627
+      }
628
+      else if (this.lastKey==40) // Down
629
+      {
630
+        var newIndex = itemIndex+1;
631
+        var focusItem;
632
+        var item = document.getElementById('Item'+itemIndex);
633
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
634
+        if (elem && elem.style.display == 'block') // children visible
635
+        {
636
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
637
+        }
638
+        if (!focusItem) focusItem = this.NavNext(newIndex);
639
+        if (focusItem)  focusItem.focus();
640
+      }
641
+      else if (this.lastKey==39) // Right
642
+      {
643
+        var item = document.getElementById('Item'+itemIndex);
644
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
645
+        if (elem) elem.style.display = 'block';
646
+      }
647
+      else if (this.lastKey==37) // Left
648
+      {
649
+        var item = document.getElementById('Item'+itemIndex);
650
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
651
+        if (elem) elem.style.display = 'none';
652
+      }
653
+      else if (this.lastKey==27) // Escape
654
+      {
655
+        parent.searchBox.CloseResultsWindow();
656
+        parent.document.getElementById("MSearchField").focus();
657
+      }
658
+      else if (this.lastKey==13) // Enter
659
+      {
660
+        return true;
661
+      }
662
+      return false;
663
+    }
664
+
665
+    this.NavChild = function(evt,itemIndex,childIndex)
666
+    {
667
+      var e  = (evt) ? evt : window.event; // for IE
668
+      if (e.keyCode==13) return true;
669
+      if (!this.ProcessKeys(e)) return false;
670
+
671
+      if (this.lastKey==38) // Up
672
+      {
673
+        if (childIndex>0)
674
+        {
675
+          var newIndex = childIndex-1;
676
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
677
+        }
678
+        else // already at first child, jump to parent
679
+        {
680
+          document.getElementById('Item'+itemIndex).focus();
681
+        }
682
+      }
683
+      else if (this.lastKey==40) // Down
684
+      {
685
+        var newIndex = childIndex+1;
686
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
687
+        if (!elem) // last child, jump to parent next parent
688
+        {
689
+          elem = this.NavNext(itemIndex+1);
690
+        }
691
+        if (elem)
692
+        {
693
+          elem.focus();
694
+        }
695
+      }
696
+      else if (this.lastKey==27) // Escape
697
+      {
698
+        parent.searchBox.CloseResultsWindow();
699
+        parent.document.getElementById("MSearchField").focus();
700
+      }
701
+      else if (this.lastKey==13) // Enter
702
+      {
703
+        return true;
704
+      }
705
+      return false;
706
+    }
707
+}
708
+
709
+function setKeyActions(elem,action)
710
+{
711
+  elem.setAttribute('onkeydown',action);
712
+  elem.setAttribute('onkeypress',action);
713
+  elem.setAttribute('onkeyup',action);
714
+}
715
+
716
+function setClassAttr(elem,attr)
717
+{
718
+  elem.setAttribute('class',attr);
719
+  elem.setAttribute('className',attr);
720
+}
721
+
722
+function createResults()
723
+{
724
+  var results = document.getElementById("SRResults");
725
+  for (var e=0; e<searchData.length; e++)
726
+  {
727
+    var id = searchData[e][0];
728
+    var srResult = document.createElement('div');
729
+    srResult.setAttribute('id','SR_'+id);
730
+    setClassAttr(srResult,'SRResult');
731
+    var srEntry = document.createElement('div');
732
+    setClassAttr(srEntry,'SREntry');
733
+    var srLink = document.createElement('a');
734
+    srLink.setAttribute('id','Item'+e);
735
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
736
+    setClassAttr(srLink,'SRSymbol');
737
+    srLink.innerHTML = searchData[e][1][0];
738
+    srEntry.appendChild(srLink);
739
+    if (searchData[e][1].length==2) // single result
740
+    {
741
+      srLink.setAttribute('href',searchData[e][1][1][0]);
742
+      if (searchData[e][1][1][1])
743
+      {
744
+       srLink.setAttribute('target','_parent');
745
+      }
746
+      var srScope = document.createElement('span');
747
+      setClassAttr(srScope,'SRScope');
748
+      srScope.innerHTML = searchData[e][1][1][2];
749
+      srEntry.appendChild(srScope);
750
+    }
751
+    else // multiple results
752
+    {
753
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
754
+      var srChildren = document.createElement('div');
755
+      setClassAttr(srChildren,'SRChildren');
756
+      for (var c=0; c<searchData[e][1].length-1; c++)
757
+      {
758
+        var srChild = document.createElement('a');
759
+        srChild.setAttribute('id','Item'+e+'_c'+c);
760
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
761
+        setClassAttr(srChild,'SRScope');
762
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
763
+        if (searchData[e][1][c+1][1])
764
+        {
765
+         srChild.setAttribute('target','_parent');
766
+        }
767
+        srChild.innerHTML = searchData[e][1][c+1][2];
768
+        srChildren.appendChild(srChild);
769
+      }
770
+      srEntry.appendChild(srChildren);
771
+    }
772
+    srResult.appendChild(srEntry);
773
+    results.appendChild(srResult);
774
+  }
775
+}
776
+
777
+function init_search()
778
+{
779
+  var results = document.getElementById("MSearchSelectWindow");
780
+  for (var key in indexSectionLabels)
781
+  {
782
+    var link = document.createElement('a');
783
+    link.setAttribute('class','SelectItem');
784
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
785
+    link.href='javascript:void(0)';
786
+    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
787
+    results.appendChild(link);
788
+  }
789
+  searchBox.OnSelectItem(0);
790
+}
791
+

BIN
doc/en/html/search/search_l.png View File


BIN
doc/en/html/search/search_m.png View File


BIN
doc/en/html/search/search_r.png View File


+ 27
- 0
doc/en/html/search/searchdata.js View File

@@ -0,0 +1,27 @@
1
+var indexSectionsWithContent =
2
+{
3
+  0: "cflmou~",
4
+  1: "cm",
5
+  2: "u",
6
+  3: "f",
7
+  4: "clmo~"
8
+};
9
+
10
+var indexSectionNames =
11
+{
12
+  0: "all",
13
+  1: "classes",
14
+  2: "namespaces",
15
+  3: "files",
16
+  4: "functions"
17
+};
18
+
19
+var indexSectionLabels =
20
+{
21
+  0: "All",
22
+  1: "Classes",
23
+  2: "Namespaces",
24
+  3: "Files",
25
+  4: "Functions"
26
+};
27
+

BIN
doc/en/html/splitbar.png View File


BIN
doc/en/html/sync_off.png View File


BIN
doc/en/html/sync_on.png View File


BIN
doc/en/html/tab_a.png View File


BIN
doc/en/html/tab_b.png View File


BIN
doc/en/html/tab_h.png View File


BIN
doc/en/html/tab_s.png View File


+ 60
- 0
doc/en/html/tabs.css View File

@@ -0,0 +1,60 @@
1
+.tabs, .tabs2, .tabs3 {
2
+    background-image: url('tab_b.png');
3
+    width: 100%;
4
+    z-index: 101;
5
+    font-size: 13px;
6
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
7
+}
8
+
9
+.tabs2 {
10
+    font-size: 10px;
11
+}
12
+.tabs3 {
13
+    font-size: 9px;
14
+}
15
+
16
+.tablist {
17
+    margin: 0;
18
+    padding: 0;
19
+    display: table;
20
+}
21
+
22
+.tablist li {
23
+    float: left;
24
+    display: table-cell;
25
+    background-image: url('tab_b.png');
26
+    line-height: 36px;
27
+    list-style: none;
28
+}
29
+
30
+.tablist a {
31
+    display: block;
32
+    padding: 0 20px;
33
+    font-weight: bold;
34
+    background-image:url('tab_s.png');
35
+    background-repeat:no-repeat;
36
+    background-position:right;
37
+    color: #283A5D;
38
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
39
+    text-decoration: none;
40
+    outline: none;
41
+}
42
+
43
+.tabs3 .tablist a {
44
+    padding: 0 10px;
45
+}
46
+
47
+.tablist a:hover {
48
+    background-image: url('tab_h.png');
49
+    background-repeat:repeat-x;
50
+    color: #fff;
51
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
52
+    text-decoration: none;
53
+}
54
+
55
+.tablist li.current a {
56
+    background-image: url('tab_a.png');
57
+    background-repeat:repeat-x;
58
+    color: #fff;
59
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
60
+}

+ 21
- 0
doc/en/latex/Makefile View File

@@ -0,0 +1,21 @@
1
+all: refman.pdf
2
+
3
+pdf: refman.pdf
4
+
5
+refman.pdf: clean refman.tex
6
+	pdflatex refman
7
+	makeindex refman.idx
8
+	pdflatex refman
9
+	latex_count=8 ; \
10
+	while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
11
+	    do \
12
+	      echo "Rerunning latex...." ;\
13
+	      pdflatex refman ;\
14
+	      latex_count=`expr $$latex_count - 1` ;\
15
+	    done
16
+	makeindex refman.idx
17
+	pdflatex refman
18
+
19
+
20
+clean:
21
+	rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf

+ 3
- 0
doc/en/latex/_filter_8cpp.tex View File

@@ -0,0 +1,3 @@
1
+\hypertarget{_filter_8cpp}{}\section{Filter.\+cpp File Reference}
2
+\label{_filter_8cpp}\index{Filter.\+cpp@{Filter.\+cpp}}
3
+{\ttfamily \#include \char`\"{}Merge\+Panel.\+h\char`\"{}}\\*

+ 5
- 0
doc/en/latex/annotated.tex View File

@@ -0,0 +1,5 @@
1
+\section{Class List}
2
+Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList}
3
+\item\contentsline{section}{\hyperlink{class_clickable_label}{Clickable\+Label} }{\pageref{class_clickable_label}}{}
4
+\item\contentsline{section}{\hyperlink{class_main_window}{Main\+Window} }{\pageref{class_main_window}}{}
5
+\end{DoxyCompactList}

+ 197
- 0
doc/en/latex/class_clickable_label.eps View File

@@ -0,0 +1,197 @@
1
+%!PS-Adobe-2.0 EPSF-2.0
2
+%%Title: ClassName
3
+%%Creator: Doxygen
4
+%%CreationDate: Time
5
+%%For: 
6
+%Magnification: 1.00
7
+%%Orientation: Portrait
8
+%%BoundingBox: 0 0 500 388.349515
9
+%%Pages: 0
10
+%%BeginSetup
11
+%%EndSetup
12
+%%EndComments
13
+
14
+% ----- variables -----
15
+
16
+/boxwidth 0 def
17
+/boxheight 40 def
18
+/fontheight 24 def
19
+/marginwidth 10 def
20
+/distx 20 def
21
+/disty 40 def
22
+/boundaspect 1.287500 def  % aspect ratio of the BoundingBox (width/height)
23
+/boundx 500 def
24
+/boundy boundx boundaspect div def
25
+/xspacing 0 def
26
+/yspacing 0 def
27
+/rows 2 def
28
+/cols 1 def
29
+/scalefactor 0 def
30
+/boxfont /Times-Roman findfont fontheight scalefont def
31
+
32
+% ----- procedures -----
33
+
34
+/dotted { [1 4] 0 setdash } def
35
+/dashed { [5] 0 setdash } def
36
+/solid  { [] 0 setdash } def
37
+
38
+/max % result = MAX(arg1,arg2)
39
+{
40
+  /a exch def
41
+  /b exch def
42
+  a b gt {a} {b} ifelse
43
+} def
44
+
45
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
46
+{
47
+  0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
48
+} def
49
+
50
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
51
+{
52
+  /str exch def
53
+  /boxwidth boxwidth str stringwidth pop max def
54
+} def
55
+
56
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
57
+{ gsave
58
+  2 setlinewidth
59
+  newpath
60
+  exch xspacing mul xoffset add
61
+  exch yspacing mul
62
+  moveto
63
+  boxwidth 0 rlineto 
64
+  0 boxheight rlineto 
65
+  boxwidth neg 0 rlineto 
66
+  0 boxheight neg rlineto 
67
+  closepath
68
+  dup stringwidth pop neg boxwidth add 2 div
69
+  boxheight fontheight 2 div sub 2 div
70
+  rmoveto show stroke
71
+  grestore
72
+} def  
73
+
74
+/mark
75
+{ newpath
76
+  exch xspacing mul xoffset add boxwidth add
77
+  exch yspacing mul
78
+  moveto
79
+  0 boxheight 4 div rlineto
80
+  boxheight neg 4 div boxheight neg 4 div rlineto
81
+  closepath
82
+  eofill
83
+  stroke
84
+} def
85
+
86
+/arrow
87
+{ newpath
88
+  moveto
89
+  3 -8 rlineto
90
+  -6 0 rlineto
91
+  3 8 rlineto
92
+  closepath
93
+  eofill
94
+  stroke
95
+} def
96
+
97
+/out % draws an output connector for the block at (arg1,arg2)
98
+{
99
+  newpath
100
+  exch xspacing mul xoffset add boxwidth 2 div add
101
+  exch yspacing mul boxheight add
102
+  /y exch def
103
+  /x exch def
104
+  x y moveto
105
+  0 disty 2 div rlineto 
106
+  stroke
107
+  1 eq { x y disty 2 div add arrow } if
108
+} def
109
+
110
+/in % draws an input connector for the block at (arg1,arg2)
111
+{
112
+  newpath
113
+  exch xspacing mul xoffset add boxwidth 2 div add
114
+  exch yspacing mul disty 2 div sub
115
+  /y exch def
116
+  /x exch def
117
+  x y moveto
118
+  0 disty 2 div rlineto
119
+  stroke
120
+  1 eq { x y disty 2 div add arrow } if
121
+} def
122
+
123
+/hedge
124
+{
125
+  exch xspacing mul xoffset add boxwidth 2 div add
126
+  exch yspacing mul boxheight 2 div sub
127
+  /y exch def
128
+  /x exch def
129
+  newpath
130
+  x y moveto
131
+  boxwidth 2 div distx add 0 rlineto
132
+  stroke
133
+  1 eq
134
+  { newpath x boxwidth 2 div distx add add y moveto
135
+    -8 3 rlineto
136
+    0 -6 rlineto
137
+    8 3 rlineto
138
+    closepath
139
+    eofill
140
+    stroke
141
+  } if
142
+} def
143
+
144
+/vedge
145
+{
146
+  /ye exch def
147
+  /ys exch def
148
+  /xs exch def
149
+  newpath
150
+  xs xspacing mul xoffset add boxwidth 2 div add dup
151
+  ys yspacing mul boxheight 2 div sub
152
+  moveto
153
+  ye yspacing mul boxheight 2 div sub
154
+  lineto
155
+  stroke
156
+} def
157
+
158
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
159
+{
160
+  /ys exch def
161
+  /xe exch def
162
+  /xs exch def
163
+  newpath
164
+  xs xspacing mul xoffset add boxwidth 2 div add
165
+  ys yspacing mul disty 2 div sub
166
+  moveto
167
+  xspacing xe xs sub mul 0
168
+  rlineto
169
+  stroke
170
+} def
171
+
172
+% ----- main ------
173
+
174
+boxfont setfont
175
+1 boundaspect scale
176
+(ClickableLabel) cw
177
+(QLabel) cw
178
+/boxwidth boxwidth marginwidth 2 mul add def
179
+/xspacing boxwidth distx add def
180
+/yspacing boxheight disty add def
181
+/scalefactor 
182
+  boxwidth cols mul distx cols 1 sub mul add
183
+  boxheight rows mul disty rows 1 sub mul add boundaspect mul 
184
+  max def
185
+boundx scalefactor div boundy scalefactor div scale
186
+
187
+% ----- classes -----
188
+
189
+ (ClickableLabel) 0.000000 0.000000 box
190
+ (QLabel) 0.000000 1.000000 box
191
+
192
+% ----- relations -----
193
+
194
+solid
195
+0 0.000000 0.000000 out
196
+solid
197
+1 0.000000 1.000000 in

BIN
doc/en/latex/class_clickable_label.pdf View File


+ 59
- 0
doc/en/latex/class_clickable_label.tex View File

@@ -0,0 +1,59 @@
1
+\hypertarget{class_clickable_label}{}\section{Clickable\+Label Class Reference}
2
+\label{class_clickable_label}\index{Clickable\+Label@{Clickable\+Label}}
3
+
4
+
5
+{\ttfamily \#include $<$Clickable\+Label.\+h$>$}
6
+
7
+Inheritance diagram for Clickable\+Label\+:\begin{figure}[H]
8
+\begin{center}
9
+\leavevmode
10
+\includegraphics[height=2.000000cm]{class_clickable_label}
11
+\end{center}
12
+\end{figure}
13
+\subsection*{Signals}
14
+\begin{DoxyCompactItemize}
15
+\item 
16
+\hypertarget{class_clickable_label_a6921078a370cf6289bc029ff92c6239c}{}void {\bfseries Mouse\+\_\+\+Pressed} ()\label{class_clickable_label_a6921078a370cf6289bc029ff92c6239c}
17
+
18
+\item 
19
+\hypertarget{class_clickable_label_a7f7b212c028f557c801ce57425cbdba8}{}void {\bfseries Mouse\+\_\+\+Pos} ()\label{class_clickable_label_a7f7b212c028f557c801ce57425cbdba8}
20
+
21
+\item 
22
+\hypertarget{class_clickable_label_abab95f014364c2fc02b6e8c1f1794b5c}{}void {\bfseries Mouse\+\_\+\+Left} ()\label{class_clickable_label_abab95f014364c2fc02b6e8c1f1794b5c}
23
+
24
+\end{DoxyCompactItemize}
25
+\subsection*{Public Member Functions}
26
+\begin{DoxyCompactItemize}
27
+\item 
28
+\hypertarget{class_clickable_label_a62b23a9a7f7aed36692db03640561072}{}\hyperlink{class_clickable_label_a62b23a9a7f7aed36692db03640561072}{Clickable\+Label} (Q\+Widget $\ast$parent=0)\label{class_clickable_label_a62b23a9a7f7aed36692db03640561072}
29
+
30
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item 
31
+\hypertarget{class_clickable_label_a6207e08167257d9a0505a219a659c53f}{}void \hyperlink{class_clickable_label_a6207e08167257d9a0505a219a659c53f}{mouse\+Move\+Event} (Q\+Mouse\+Event $\ast$ev)\label{class_clickable_label_a6207e08167257d9a0505a219a659c53f}
32
+
33
+\begin{DoxyCompactList}\small\item\em Funtion to add mouse event to the label\+Widget. \end{DoxyCompactList}\item 
34
+\hypertarget{class_clickable_label_adfec8a6c2ddd87b673f3a734ea6afa2b}{}void \hyperlink{class_clickable_label_adfec8a6c2ddd87b673f3a734ea6afa2b}{mouse\+Press\+Event} (Q\+Mouse\+Event $\ast$ev)\label{class_clickable_label_adfec8a6c2ddd87b673f3a734ea6afa2b}
35
+
36
+\begin{DoxyCompactList}\small\item\em Funtion to add mouse event to the label\+Widget. \end{DoxyCompactList}\item 
37
+\hypertarget{class_clickable_label_ad884c3cdc7a6c16af19143e84c79b5da}{}void \hyperlink{class_clickable_label_ad884c3cdc7a6c16af19143e84c79b5da}{leave\+Event} (Q\+Event $\ast$)\label{class_clickable_label_ad884c3cdc7a6c16af19143e84c79b5da}
38
+
39
+\begin{DoxyCompactList}\small\item\em Funtion to add mouse event to the label\+Widget. \end{DoxyCompactList}\end{DoxyCompactItemize}
40
+\subsection*{Public Attributes}
41
+\begin{DoxyCompactItemize}
42
+\item 
43
+\hypertarget{class_clickable_label_ac4efea912d411bc2ab98b4ea06cb076a}{}int {\bfseries x}\label{class_clickable_label_ac4efea912d411bc2ab98b4ea06cb076a}
44
+
45
+\item 
46
+\hypertarget{class_clickable_label_ad59a3ac94dbad08ac2f60d70b063d130}{}int {\bfseries y}\label{class_clickable_label_ad59a3ac94dbad08ac2f60d70b063d130}
47
+
48
+\end{DoxyCompactItemize}
49
+
50
+
51
+\subsection{Detailed Description}
52
+A class that permits a label to be clicked.
53
+
54
+With this class we can determine de mouse position when is pressed and when the mouse left the label. 
55
+
56
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
57
+\item 
58
+Clickable\+Label.\+h\item 
59
+Clickable\+Label.\+cpp\end{DoxyCompactItemize}

+ 0
- 0
doc/en/latex/class_main_window.eps View File


Some files were not shown because too many files changed in this diff