Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.77 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <math.h>
  4. #include "mypgm.h"
  5. #include "Complex.h"
  6.  
  7. namespace OperatiuniFrecventa {
  8.  
  9. using namespace System;
  10. using namespace System::ComponentModel;
  11. using namespace System::Collections;
  12. using namespace System::Windows::Forms;
  13. using namespace System::Data;
  14. using namespace System::Drawing;
  15.  
  16.  
  17.  
  18. /// <summary>
  19. /// Summary for Form1
  20. ///
  21. /// WARNING: If you change the name of this class, you will need to change the
  22. /// 'Resource File Name' property for the managed resource compiler tool
  23. /// associated with all .resx files this class depends on. Otherwise,
  24. /// the designers will not be able to interact properly with localized
  25. /// resources associated with this form.
  26. /// </summary>
  27. public ref class Form1 : public System::Windows::Forms::Form
  28. {
  29. public:
  30. unsigned char** ptrImage;
  31. int w, h;
  32. int wr, hr;
  33. int L;
  34. Bitmap ^bmpImage, ^bmpResultImage;
  35. private: System::Windows::Forms::ToolStripMenuItem^ fourierToolStripMenuItem;
  36. private: System::Windows::Forms::ToolStripMenuItem^ inverseToolStripMenuItem;
  37. private: System::Windows::Forms::ToolStripMenuItem^ filterToolStripMenuItem;
  38. public:
  39.  
  40. Form1(void)
  41. {
  42. InitializeComponent();
  43. //
  44. //TODO: Add the constructor code here
  45. //
  46. ptrImage = 0;
  47. w = 0;
  48. h = 0;
  49. }
  50.  
  51. protected:
  52. /// <summary>
  53. /// Clean up any resources being used.
  54. /// </summary>
  55. ~Form1()
  56. {
  57. if (components)
  58. {
  59. delete components;
  60. }
  61. }
  62. private: System::Windows::Forms::MenuStrip^ menuStrip1;
  63. protected:
  64. private: System::Windows::Forms::ToolStripMenuItem^ fileToolStripMenuItem;
  65. private: System::Windows::Forms::ToolStripMenuItem^ openImageToolStripMenuItem;
  66. private: System::Windows::Forms::ToolStripMenuItem^ exitToolStripMenuItem;
  67. private: System::Windows::Forms::ToolStripMenuItem^ operatieToolStripMenuItem;
  68.  
  69. private: System::Windows::Forms::OpenFileDialog^ openFileDialog;
  70. private: System::Windows::Forms::PictureBox^ pbOrigImage;
  71. private: System::Windows::Forms::PictureBox^ pbTransfImage;
  72. private: System::ComponentModel::IContainer^ components;
  73.  
  74.  
  75. private:
  76. /// <summary>
  77. /// Required designer variable.
  78. /// </summary>
  79.  
  80.  
  81. #pragma region Windows Form Designer generated code
  82. /// <summary>
  83. /// Required method for Designer support - do not modify
  84. /// the contents of this method with the code editor.
  85. /// </summary>
  86. void InitializeComponent(void)
  87. {
  88. this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
  89. this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
  90. this->openImageToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
  91. this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
  92. this->operatieToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
  93. this->fourierToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
  94. this->inverseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
  95. this->openFileDialog = (gcnew System::Windows::Forms::OpenFileDialog());
  96. this->pbOrigImage = (gcnew System::Windows::Forms::PictureBox());
  97. this->pbTransfImage = (gcnew System::Windows::Forms::PictureBox());
  98. this->filterToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
  99. this->menuStrip1->SuspendLayout();
  100. (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbOrigImage))->BeginInit();
  101. (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbTransfImage))->BeginInit();
  102. this->SuspendLayout();
  103. //
  104. // menuStrip1
  105. //
  106. this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->fileToolStripMenuItem,
  107. this->operatieToolStripMenuItem});
  108. this->menuStrip1->Location = System::Drawing::Point(0, 0);
  109. this->menuStrip1->Name = L"menuStrip1";
  110. this->menuStrip1->Size = System::Drawing::Size(998, 24);
  111. this->menuStrip1->TabIndex = 0;
  112. this->menuStrip1->Text = L"menuStrip1";
  113. //
  114. // fileToolStripMenuItem
  115. //
  116. this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->openImageToolStripMenuItem,
  117. this->exitToolStripMenuItem});
  118. this->fileToolStripMenuItem->Name = L"fileToolStripMenuItem";
  119. this->fileToolStripMenuItem->Size = System::Drawing::Size(46, 20);
  120. this->fileToolStripMenuItem->Text = L"Fisier";
  121. //
  122. // openImageToolStripMenuItem
  123. //
  124. this->openImageToolStripMenuItem->Name = L"openImageToolStripMenuItem";
  125. this->openImageToolStripMenuItem->Size = System::Drawing::Size(158, 22);
  126. this->openImageToolStripMenuItem->Text = L"Incarca imagine";
  127. this->openImageToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::openImageToolStripMenuItem_Click);
  128. //
  129. // exitToolStripMenuItem
  130. //
  131. this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
  132. this->exitToolStripMenuItem->Size = System::Drawing::Size(158, 22);
  133. this->exitToolStripMenuItem->Text = L"Iesire";
  134. this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::exitToolStripMenuItem_Click);
  135. //
  136. // operatieToolStripMenuItem
  137. //
  138. this->operatieToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(3) {this->fourierToolStripMenuItem,
  139. this->inverseToolStripMenuItem, this->filterToolStripMenuItem});
  140. this->operatieToolStripMenuItem->Name = L"operatieToolStripMenuItem";
  141. this->operatieToolStripMenuItem->Size = System::Drawing::Size(64, 20);
  142. this->operatieToolStripMenuItem->Text = L"Operatie";
  143. //
  144. // fourierToolStripMenuItem
  145. //
  146. this->fourierToolStripMenuItem->Name = L"fourierToolStripMenuItem";
  147. this->fourierToolStripMenuItem->Size = System::Drawing::Size(152, 22);
  148. this->fourierToolStripMenuItem->Text = L"Fourier";
  149. this->fourierToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::fourierToolStripMenuItem_Click);
  150. //
  151. // inverseToolStripMenuItem
  152. //
  153. this->inverseToolStripMenuItem->Name = L"inverseToolStripMenuItem";
  154. this->inverseToolStripMenuItem->Size = System::Drawing::Size(152, 22);
  155. this->inverseToolStripMenuItem->Text = L"Inverse";
  156. this->inverseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::inverseToolStripMenuItem_Click);
  157. //
  158. // openFileDialog
  159. //
  160. this->openFileDialog->FileName = L"select file";
  161. this->openFileDialog->Filter = L"JPEG Files (*.jpg,*.jpeg)|*.jpg|Bitmap Files (*.bmp)|*.bmp|PNG Files (*.png)|*.pn"
  162. L"g|Portable Graymap (*.pgm)|*.pgm|GIF Files (*.gif)|*.gif";
  163. //
  164. // pbOrigImage
  165. //
  166. this->pbOrigImage->BackColor = System::Drawing::SystemColors::ControlLightLight;
  167. this->pbOrigImage->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
  168. this->pbOrigImage->Location = System::Drawing::Point(380, 40);
  169. this->pbOrigImage->Name = L"pbOrigImage";
  170. this->pbOrigImage->Size = System::Drawing::Size(256, 256);
  171. this->pbOrigImage->TabIndex = 1;
  172. this->pbOrigImage->TabStop = false;
  173. //
  174. // pbTransfImage
  175. //
  176. this->pbTransfImage->BackColor = System::Drawing::SystemColors::ControlLightLight;
  177. this->pbTransfImage->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
  178. this->pbTransfImage->Location = System::Drawing::Point(20, 40);
  179. this->pbTransfImage->Name = L"pbTransfImage";
  180. this->pbTransfImage->Size = System::Drawing::Size(256, 256);
  181. this->pbTransfImage->TabIndex = 2;
  182. this->pbTransfImage->TabStop = false;
  183. //
  184. // filterToolStripMenuItem1
  185. //
  186. this->filterToolStripMenuItem->Name = L"filterToolStripMenuItem";
  187. this->filterToolStripMenuItem->Size = System::Drawing::Size(152, 22);
  188. this->filterToolStripMenuItem->Text = L"Filter";
  189. this->filterToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::filterToolStripMenuItem_Click);
  190. //
  191. // Form1
  192. //
  193. this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
  194. this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
  195. this->ClientSize = System::Drawing::Size(998, 479);
  196. this->Controls->Add(this->pbTransfImage);
  197. this->Controls->Add(this->pbOrigImage);
  198. this->Controls->Add(this->menuStrip1);
  199. this->MainMenuStrip = this->menuStrip1;
  200. this->Name = L"Form1";
  201. this->Text = L"Operatiuni punctuale";
  202. this->menuStrip1->ResumeLayout(false);
  203. this->menuStrip1->PerformLayout();
  204. (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbOrigImage))->EndInit();
  205. (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbTransfImage))->EndInit();
  206. this->ResumeLayout(false);
  207. this->PerformLayout();
  208.  
  209. }
  210. #pragma endregion
  211.  
  212. private: void enableOpMenu(bool enable)
  213. {
  214. fourierToolStripMenuItem->Enabled;
  215. filterToolStripMenuItem->Enabled;
  216. }
  217.  
  218. private: void freeMem()
  219. {
  220. if(ptrImage)
  221. {
  222. for(int i = 0; i < h; i++)
  223. delete[] ptrImage[i];
  224. delete[] ptrImage;
  225. ptrImage = 0;
  226. }
  227.  
  228. }
  229. private: System::Void openImageToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
  230.  
  231. freeMem();
  232. if(this->openFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){
  233. String^ fileName = openFileDialog->FileName;
  234.  
  235. if(fileName->Contains(".pgm")){
  236. char *ptrFileName = new char[fileName->Length+1];
  237. int i;
  238. for(i = 0; i < fileName->Length; i++)
  239. ptrFileName[i] = (char)fileName[i];
  240. ptrFileName[i] = '\0';
  241. int width, height;
  242. ptrImage = load_image_data(ptrFileName, width, height);
  243.  
  244. w = width;
  245. h = height;
  246.  
  247. bmpImage = gcnew Bitmap(h, w);
  248. for(int i = 0; i < h; i++)
  249. for(int j = 0; j < w; j++){
  250. bmpImage->SetPixel(i, j, Color::FromArgb(ptrImage[i][j], ptrImage[i][j], ptrImage[i][j]));
  251. }
  252. }else{
  253. bmpImage = gcnew Bitmap(fileName);
  254. h = bmpImage->Width;
  255. w = bmpImage->Height;
  256. ptrImage = new unsigned char*[h];
  257. for(int i = 0; i < h; i++){
  258. ptrImage[i] = new unsigned char[w];
  259. for(int j = 0; j < w; j++)
  260. ptrImage[i][j] = (unsigned char)((bmpImage->GetPixel(i, j).R + bmpImage->GetPixel(i, j).G + bmpImage->GetPixel(i, j).B)/3.);
  261. }
  262.  
  263. }
  264. if(bmpImage){
  265. this->pbOrigImage->Image = bmpImage;
  266.  
  267. //SizeF scaleFactor((float)bmpImage->Width/this->pbOrigImage->Width, (float)bmpImage->Height/this->pbOrigImage->Height);
  268. //this->pbOrigImage->Scale(scaleFactor);
  269.  
  270. //this->pbTransfImage->Width = this->pbOrigImage->Width;
  271. //this->pbTransfImage->Height = this->pbOrigImage->Height;
  272.  
  273. this->pbOrigImage->Location = Point(10, 40);
  274.  
  275. int locX = this->pbOrigImage->Location.X + this->pbOrigImage->Width + 80;
  276. this->pbTransfImage->Location = Point(locX, this->pbOrigImage->Location.Y);
  277.  
  278. enableOpMenu(true);
  279.  
  280. bmpResultImage = gcnew Bitmap(h, w);
  281.  
  282. this->pbOrigImage->SizeMode = PictureBoxSizeMode::StretchImage;
  283. this->pbTransfImage->SizeMode = PictureBoxSizeMode::StretchImage;
  284. }
  285. }
  286. }
  287.  
  288. private: System::Void exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
  289. freeMem();
  290. Application::Exit();
  291. }
  292.  
  293. private: Complex** calculFourier(unsigned char **img, int w, int h)
  294. {
  295. const double PI = 3.14;
  296. Complex **tmp = new Complex*[w];
  297.  
  298. for (int i = 0; i < w; i++)
  299. tmp[i] = new Complex[h];
  300.  
  301. for (int u = 0; u < w; u++)
  302. {
  303. for (int v = 0; v < h; v++)
  304. {
  305. float re = 0, im = 0;
  306. for (int x = 0; x < w; x++)
  307. {
  308. for (int y = 0; y < h; y++)
  309. {
  310. float exponent = 2*PI*(u*x/w + v*y/h);
  311. re += img[x][y] * cos(exponent);
  312. im += img[x][y] * sin(-exponent);
  313. }
  314. }
  315.  
  316. tmp[u][v].setRe(re);
  317. tmp[u][v].setIm(im);
  318. }
  319. }
  320. return tmp;
  321.  
  322. }
  323.  
  324. private: System::Void fourierToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
  325. {
  326. Complex **fourier = calculFourier(ptrImage, w, h);
  327.  
  328. for (int i = 0; i < w/2; i++)
  329. for (int j = 0; j < h/2; j++)
  330. {
  331. Complex aux = fourier[i][j];
  332. fourier[i][j] = fourier[i+w/2][j+h/2];
  333. fourier[i+w/2][j+h/2] = aux;
  334. }
  335.  
  336. for (int i = 0; i < w/2; i++)
  337. for (int j = h/2; j < h; j++)
  338. {
  339. Complex aux = fourier[i][j];
  340. fourier[i][j] = fourier[i+w/2][j-h/2];
  341. fourier[i+w/2][j-h/2] = aux;
  342. }
  343.  
  344. float **modul = new modul*[w];
  345. for (int i = 0; i < w; i++)
  346. modul[i] = new float[h];
  347.  
  348. for (int i = 0; i < w; i++)
  349. for (int j = 0; j < h; j++)
  350. {
  351. modul[i][j] = fourier[i][j]->abs();
  352. }
  353.  
  354. for(int r = 0; r < h; r++)
  355. for(int c = 0; c < w; c++)
  356. {
  357. unsigned char result = 0;
  358.  
  359. bmpResultImage->SetPixel(r, c, Color::FromArgb(result, result, result));
  360. }
  361.  
  362. pbTransfImage->Image = bmpResultImage;
  363. }
  364.  
  365. private: System::Void inverseToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
  366. {
  367. for(int r = 0; r < h; r++)
  368. for(int c = 0; c < w; c++)
  369. {
  370. unsigned char result = 0;
  371.  
  372. bmpResultImage->SetPixel(r, c, Color::FromArgb(result, result, result));
  373. }
  374.  
  375. pbTransfImage->Image = bmpResultImage;
  376. }
  377. private: System::Void filterToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
  378. {
  379. for(int r = 0; r < h; r++)
  380. for(int c = 0; c < w; c++)
  381. {
  382. unsigned char result = 0;
  383.  
  384. bmpResultImage->SetPixel(r, c, Color::FromArgb(result, result, result));
  385. }
  386.  
  387. pbTransfImage->Image = bmpResultImage;
  388. }
  389. };
  390. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement