No Description

ImageScrambler.h 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #ifndef IMAGESCRAMBLER_H
  2. #define IMAGESCRAMBLER_H
  3. #include <QMainWindow>
  4. #include <QFileDialog>
  5. #include <QDir>
  6. #include <QMessageBox>
  7. #include <QShortcut>
  8. #include <QImage>
  9. namespace Ui {
  10. class ImageScrambler;
  11. }
  12. class ImageScrambler : public QMainWindow
  13. {
  14. Q_OBJECT
  15. public:
  16. /// \fn ImageScrambler::ImageScrambler(QWidget *parent)
  17. /// \~English
  18. /// \brief Constructor
  19. /// \~Spanish
  20. /// \brief Constructor
  21. explicit ImageScrambler(QWidget *parent = 0);
  22. /// \fn ImageScrambler::~ImageScrambler(QWidget *parent)
  23. /// \~English
  24. /// \brief Destructor
  25. /// \~Spanish
  26. /// \brief Destructor
  27. ~ImageScrambler();
  28. /// \fn void ImageScrambler::cropSwap(QImage &img, int x0, int y0, int x1, int y1, int width, int height )
  29. /// \~English
  30. /// \brief Funtion that crop two squares of equal size of an image or sub image and swaps them.
  31. /// The funtion receives two coords (x0, y0) and (x1, y1) and a width and a height. Then swaps pixel
  32. /// by pixel the square formed from the top left coordinate (x0, y0) to the bottom right coordinate (x0+width, y0+height)
  33. /// with the square formed from the top left coordinate (x1, y1) to the bottom right (x1+width, y1+height).
  34. /// \param image Reference to the image to swap the squares.
  35. /// \param x0 The top left x coordinate of the first square in the image.
  36. /// \param y0 The top left y coordinate of the first square in the image.
  37. /// \param x1 The top left x coordinate of the second square in the image.
  38. /// \param y1 The top left y coordinate of the second square in the image.
  39. /// \param width Width of the squares
  40. /// \param height Height of the squares
  41. /// \~Spanish
  42. /// \brief Function que corta dos cuadrados del mismo tamano de una imagen o sub imagen y luego los intercambia.
  43. /// La funcion recibe dos coordenadas (x0,y0) y (x1,y1) y un ancho y un alto. Entonces intercambia
  44. /// pixel por pixel el cuadrado que se forma desde la coordenada en el tope a la izquierda (x0,y0) a la coordenada abajo derecha (x0+ancho, y0+alto)
  45. /// con el cuadrado formado desde la coordenada en el tope izquierda (x1, y1) hasta la coordenada abajo derecha (x1+width, y1+height).
  46. /// \param image Referencia a la imagen a la que se le van a intercambiar los cuadros.
  47. /// \param x0 La coordenada arriba izquierda x del primer cuadrado en la imagen.
  48. /// \param y0 La coordenada arriba izquierda y del primer cuadrado en la imagen.
  49. /// \param x1 La coordenada arriba izquierda x del segundo cuadrado en la imagen.
  50. /// \param y1 La coordenada arriba izquierda y del segundo cuadrado en la imagen.
  51. /// \param width ancho de los cuadrados
  52. /// \param height altura de los cuadrados
  53. void cropSwap(QImage &img, int x0, int y0, int x1, int y1, int width, int height );
  54. /// \fn QImage ImageScrambler::ScrambleFilter(QImage image, int N, int sw, int sh, int width, int height)
  55. /// \~English
  56. /// \brief Funtion that recursively scrambles an images by dividing the image in squares (sub images)
  57. /// and then swapping them. The first step the program does is divide the image in two or four squares
  58. /// and swap the squares, the resulting image is divided in four squares and then the same steps are applied
  59. /// recursively to each of the four squares.
  60. /// \param image The image to scramble
  61. /// \param level The depth of the recursion. The image will be scrambled in 4^n squares.
  62. /// \param sx Starting left top x coordinate of the image or sub image to divide
  63. /// \param sy Starting left top y coodinate of the image or sub image to divide
  64. /// \param width Width of the received image
  65. /// \param height Height of the received image
  66. /// \return the scrambled image
  67. /// \~Spanish
  68. /// \brief Funcion que recursivamente revuelve una imagen dividiendola en cuadrados (sub imagenes)
  69. /// y luego intercambiandolas. El primer paso que el programa hace es dividir la imagen en two o cuatro cuadrados
  70. /// e intercambia los cuadrados, el resultado de la imagen se divide en cuatros cuadros y cada uno de los cuadros
  71. /// se le aplican los mismos pasos recursivamente.
  72. /// \param image The image a revolver
  73. /// \param level La profundidad de la recursion. La imagen se revolvera en 4^N cuadrados.
  74. /// \param sx La coordenada arriba izquierda x inicial de la imagen o sub imagen a dividir.
  75. /// \param sy La coordenada arriba izquierda y inicial de la imagen o sub imagen a dividir.
  76. /// \param width Ancho de la imagen recibida
  77. /// \param height Altura de la imagen recibida
  78. /// \return la imagen revuelta
  79. QImage ScrambleFilter(QImage image, int level, int sx, int sy, int width, int height);
  80. private slots:
  81. /// \fn void ImageScrambler::on_btnLoadNewImage_clicked()
  82. /// \~English
  83. /// \brief Function display a file browsing window to load an image into the GUI
  84. /// \~Spanish
  85. /// \brief Funcion que despliega una ventana de busqueda de archivos para cargar
  86. /// una imagen en el GUI.
  87. void on_btnLoadNewImage_clicked();
  88. /// \fn void ImageScrambler::on_btnSave_clicked()
  89. /// \~English
  90. /// \brief Function that saves the scrambled image in the computer.
  91. /// \~Spanish
  92. /// \brief Funcion que guarda la imagen revuelta en la computadora.
  93. void on_btnSave_clicked();
  94. /// \fn void ImageScrambler::on_btnScrambleImage_clicked()
  95. /// \~English
  96. /// \brief Function invokes the ScrambleFilter function to scramble the image and
  97. /// load it in the GUI.
  98. /// \~Spanish
  99. /// \brief Funcion que invoca la funcion ScrambleFilter para revolver la imagen y
  100. /// cargarla en el GUI.
  101. void on_btnScrambleImage_clicked();
  102. /// \fn void ImageScrambler::on_btnDescrambleImage_clicked()
  103. /// \~English
  104. /// \brief Function that restore the scrambled image to the original image.
  105. /// \~Spanish
  106. /// \brief Funcion que restaura la imagen revuelta a la imagen original.
  107. void on_btnDescrambleImage_clicked();
  108. /// \fn void ImageScrambler::on_actionLoad_Image_triggered()
  109. /// \~English
  110. /// \brief Function that invokes the on_btnLoadNewImage_clicked() function.
  111. /// \~Spanish
  112. /// \brief Funcion que invoca la funcion on_btnLoadNewImage_clicked().
  113. void on_actionLoad_Image_triggered();
  114. /// \fn void ImageScrambler::on_actionSave_Image_triggered()
  115. /// \~English
  116. /// \brief Function that invokes the on_btnSave_clicked() function.
  117. /// \~Spanish
  118. /// \brief Funcion que invoca la funcion on_btnSave_clicked().
  119. void on_actionSave_Image_triggered();
  120. /// \fn void ImageScrambler::on_actionScramble_Image_triggered()
  121. /// \~English
  122. /// \brief Function that invokes the on_btnScrambleImage_clicked() function.
  123. /// \~Spanish
  124. /// \brief Funcion que invoca la funcion on_btnScrambleImage_clicked().
  125. void on_actionScramble_Image_triggered();
  126. /// \fn void ImageScrambler::on_actionDescramble_Image_triggered()
  127. /// \~English
  128. /// \brief Function that invokes the on_btnDescrambleImage_clicked() function.
  129. /// \~Spanish
  130. /// \brief Funcion que invoca la funcion on_btnDescrambleImage_clicked().
  131. void on_actionDescramble_Image_triggered();
  132. private:
  133. Ui::ImageScrambler *ui;
  134. QImage originalImage; //This will hold the original image.
  135. QImage scrambledImage; //This will hold the encrypted image.
  136. int scrambleDepth ;
  137. };
  138. #endif // MAINWINDOW_H