Sim-LIT  2.0
 All Classes Namespaces Files Functions Variables Typedefs
DsjalMixer.h
Go to the documentation of this file.
1 
10 #ifndef CLASS_DSJALMIXER
11 #define CLASS_DSJALMIXER
12 
13 #include <iostream>
14 #include <fstream>
15 #include <sstream>
16 #include <string>
17 #include "ForwardProcessing.h"
18 
19 using namespace std;
20 
22 
23  bool proceed;
24 
25 public:
26 
27  DsjalMixer(){
28  /*
29  * @brief Método Constructor de la clase DsjalMixer
30  */
31  }
32 
33  ~DsjalMixer(){}
34 
35  int make(vector<DataType *> *list, int width, int height, vector<int> parameters, int nParameters, bool show_data){
43  if(nParameters!=1)
44  return 1;
45  int step = parameters[0];
46  if(step<=0)
47  return 5;
48  unsigned int i, j, k, _h_, _w_;
49  DataType * aux;
50  _h_=0;
51  _w_=0;
52  int indexH[(height*width)];
53  int indexW[(height*width)];
54  for (int i = 0, k=0; i < height; i=i+1)
55  {
56  for (int j = 0; j < width; j=j+1, k=k+1)
57  {
58  indexH[k]=i;
59  indexH[k]=j;
60  }
61  }
62  ofstream file;
63  string path = "files/Dsjal.txt";
64  file.open(path.c_str(),ofstream::out| ofstream::trunc);
65  if(file.is_open()){
66  file << (height*width) << "\n";
67 
68  indexH[0] = 0; _h_ = indexH[0];
69  indexW[0] = 0; _w_ = indexW[0];
70 
71  for(i = 0, k = 0; i < height; i=i+1)
72  for(j = 0; j < width; j=j+1, k=k+1)
73  {
74  indexW[k+1] = (indexW[k]+step)%width;
75  indexH[k+1] = indexH[k] + (int)((indexW[k]+step)/width);
76 
77  /* si Yi+1 (index_h[k+1]) alcanza el máximo de filas, las próximas coordenadas será la posición siguiente al primer píxel guardado,y
78  * así sucesivamente.
79  */
80  if(indexH[k+1] >= height)
81  {
82  indexH[k+1] = _h_ + (int)((_w_)/(width-1)); // x
83  _h_ = indexH[k+1];
84 
85  indexW[k+1] = (_w_+1)%width; // y
86  _w_ = indexW[k+1];
87  }
88  }
89 
90  indexH[0] = 0; // al finalizar indexW se hace con el valor de Width
91  indexW[0] = 0; // por lo que se sobreescribe con valores iniciales.
92 
93  for(k=0;k<(width*height);k=k+1){
94 
95  int fPos = ((indexH[k]*width)+indexW[k]);
96  aux = list->at(fPos);
97  list->at(fPos)=list->at(k);
98  list->at(k)=aux;
99  file << k << "-" << fPos << "\n";
100  }
101  if(show_data)
102  cout << "Dsjal Applied to Image\n";
103  proceed=true;
104  //this->set(1);
105  file.close();
106  }
107  return 0;
108  }
109 
110  int unmake(vector<DataType *> *list, bool show_data){
114  if(proceed){
115  vector<string> array;
116  ifstream file;
117  string line, delimiter="-";
118  int iPos, fPos;
119  string path = "files/Dsjal.txt";
120  file.open(path.c_str());
121  if(file.is_open()){
122  getline(file, line);
123  int width = atoi(line.c_str());
124  for(int x=0;x<width;x++){
125  getline(file, line);
126  array.push_back(line);
127  }
128  for(int x=0;x<width;x=x+1){
129  string s = array.back();
130  array.pop_back();
131  size_t pos=0;
132  string token;
133  pos = s.find(delimiter);
134  token = s.substr(0, pos);
135  iPos = atoi(token.c_str());
136  s.erase(0, pos + delimiter.length());
137  pos = s.find(delimiter);
138  token = s.substr(0, pos);
139  fPos = atoi(token.c_str());
140  s.erase(0, pos + delimiter.length());
141  DataType * aux = list->at(fPos);
142  list->at(fPos)=list->at(iPos);
143  list->at(iPos)=aux;
144  }
145  if(show_data)
146  cout << "Dsjal undo to Image\n";
147  //this->set(-1);
148  file.close();
149  proceed=false;
150  }
151  }
152  return 0;
153  }
154 
155 };
156 
157 #endif
Clase que implementa el Método de entrelazamiento de DSJ-AL.
Definition: DsjalMixer.h:21
Clase abstracta que representa la estructura que debe tener todo procesamiento de imagen...
Clase que representa un tipo de dato que será paquetizado.
Definition: DataType.h:18
int unmake(vector< DataType * > *list, bool show_data)
Definition: DsjalMixer.h:110
int make(vector< DataType * > *list, int width, int height, vector< int > parameters, int nParameters, bool show_data)
Definition: DsjalMixer.h:35