Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <math.h>
- #include "mypgm.h"
- #include "Complex.h"
- namespace OperatiuniFrecventa {
- using namespace System;
- using namespace System::ComponentModel;
- using namespace System::Collections;
- using namespace System::Windows::Forms;
- using namespace System::Data;
- using namespace System::Drawing;
- /// <summary>
- /// Summary for Form1
- ///
- /// WARNING: If you change the name of this class, you will need to change the
- /// 'Resource File Name' property for the managed resource compiler tool
- /// associated with all .resx files this class depends on. Otherwise,
- /// the designers will not be able to interact properly with localized
- /// resources associated with this form.
- /// </summary>
- public ref class Form1 : public System::Windows::Forms::Form
- {
- public:
- unsigned char** ptrImage;
- int w, h;
- int wr, hr;
- int L;
- Bitmap ^bmpImage, ^bmpResultImage;
- private: System::Windows::Forms::ToolStripMenuItem^ fourierToolStripMenuItem;
- private: System::Windows::Forms::ToolStripMenuItem^ inverseToolStripMenuItem;
- private: System::Windows::Forms::ToolStripMenuItem^ filterToolStripMenuItem;
- public:
- Form1(void)
- {
- InitializeComponent();
- //
- //TODO: Add the constructor code here
- //
- ptrImage = 0;
- w = 0;
- h = 0;
- }
- protected:
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- ~Form1()
- {
- if (components)
- {
- delete components;
- }
- }
- private: System::Windows::Forms::MenuStrip^ menuStrip1;
- protected:
- private: System::Windows::Forms::ToolStripMenuItem^ fileToolStripMenuItem;
- private: System::Windows::Forms::ToolStripMenuItem^ openImageToolStripMenuItem;
- private: System::Windows::Forms::ToolStripMenuItem^ exitToolStripMenuItem;
- private: System::Windows::Forms::ToolStripMenuItem^ operatieToolStripMenuItem;
- private: System::Windows::Forms::OpenFileDialog^ openFileDialog;
- private: System::Windows::Forms::PictureBox^ pbOrigImage;
- private: System::Windows::Forms::PictureBox^ pbTransfImage;
- private: System::ComponentModel::IContainer^ components;
- private:
- /// <summary>
- /// Required designer variable.
- /// </summary>
- #pragma region Windows Form Designer generated code
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- void InitializeComponent(void)
- {
- this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
- this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
- this->openImageToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
- this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
- this->operatieToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
- this->fourierToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
- this->inverseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
- this->openFileDialog = (gcnew System::Windows::Forms::OpenFileDialog());
- this->pbOrigImage = (gcnew System::Windows::Forms::PictureBox());
- this->pbTransfImage = (gcnew System::Windows::Forms::PictureBox());
- this->filterToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
- this->menuStrip1->SuspendLayout();
- (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbOrigImage))->BeginInit();
- (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbTransfImage))->BeginInit();
- this->SuspendLayout();
- //
- // menuStrip1
- //
- this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->fileToolStripMenuItem,
- this->operatieToolStripMenuItem});
- this->menuStrip1->Location = System::Drawing::Point(0, 0);
- this->menuStrip1->Name = L"menuStrip1";
- this->menuStrip1->Size = System::Drawing::Size(998, 24);
- this->menuStrip1->TabIndex = 0;
- this->menuStrip1->Text = L"menuStrip1";
- //
- // fileToolStripMenuItem
- //
- this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->openImageToolStripMenuItem,
- this->exitToolStripMenuItem});
- this->fileToolStripMenuItem->Name = L"fileToolStripMenuItem";
- this->fileToolStripMenuItem->Size = System::Drawing::Size(46, 20);
- this->fileToolStripMenuItem->Text = L"Fisier";
- //
- // openImageToolStripMenuItem
- //
- this->openImageToolStripMenuItem->Name = L"openImageToolStripMenuItem";
- this->openImageToolStripMenuItem->Size = System::Drawing::Size(158, 22);
- this->openImageToolStripMenuItem->Text = L"Incarca imagine";
- this->openImageToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::openImageToolStripMenuItem_Click);
- //
- // exitToolStripMenuItem
- //
- this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
- this->exitToolStripMenuItem->Size = System::Drawing::Size(158, 22);
- this->exitToolStripMenuItem->Text = L"Iesire";
- this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::exitToolStripMenuItem_Click);
- //
- // operatieToolStripMenuItem
- //
- this->operatieToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(3) {this->fourierToolStripMenuItem,
- this->inverseToolStripMenuItem, this->filterToolStripMenuItem});
- this->operatieToolStripMenuItem->Name = L"operatieToolStripMenuItem";
- this->operatieToolStripMenuItem->Size = System::Drawing::Size(64, 20);
- this->operatieToolStripMenuItem->Text = L"Operatie";
- //
- // fourierToolStripMenuItem
- //
- this->fourierToolStripMenuItem->Name = L"fourierToolStripMenuItem";
- this->fourierToolStripMenuItem->Size = System::Drawing::Size(152, 22);
- this->fourierToolStripMenuItem->Text = L"Fourier";
- this->fourierToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::fourierToolStripMenuItem_Click);
- //
- // inverseToolStripMenuItem
- //
- this->inverseToolStripMenuItem->Name = L"inverseToolStripMenuItem";
- this->inverseToolStripMenuItem->Size = System::Drawing::Size(152, 22);
- this->inverseToolStripMenuItem->Text = L"Inverse";
- this->inverseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::inverseToolStripMenuItem_Click);
- //
- // openFileDialog
- //
- this->openFileDialog->FileName = L"select file";
- this->openFileDialog->Filter = L"JPEG Files (*.jpg,*.jpeg)|*.jpg|Bitmap Files (*.bmp)|*.bmp|PNG Files (*.png)|*.pn"
- L"g|Portable Graymap (*.pgm)|*.pgm|GIF Files (*.gif)|*.gif";
- //
- // pbOrigImage
- //
- this->pbOrigImage->BackColor = System::Drawing::SystemColors::ControlLightLight;
- this->pbOrigImage->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
- this->pbOrigImage->Location = System::Drawing::Point(380, 40);
- this->pbOrigImage->Name = L"pbOrigImage";
- this->pbOrigImage->Size = System::Drawing::Size(256, 256);
- this->pbOrigImage->TabIndex = 1;
- this->pbOrigImage->TabStop = false;
- //
- // pbTransfImage
- //
- this->pbTransfImage->BackColor = System::Drawing::SystemColors::ControlLightLight;
- this->pbTransfImage->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
- this->pbTransfImage->Location = System::Drawing::Point(20, 40);
- this->pbTransfImage->Name = L"pbTransfImage";
- this->pbTransfImage->Size = System::Drawing::Size(256, 256);
- this->pbTransfImage->TabIndex = 2;
- this->pbTransfImage->TabStop = false;
- //
- // filterToolStripMenuItem1
- //
- this->filterToolStripMenuItem->Name = L"filterToolStripMenuItem";
- this->filterToolStripMenuItem->Size = System::Drawing::Size(152, 22);
- this->filterToolStripMenuItem->Text = L"Filter";
- this->filterToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::filterToolStripMenuItem_Click);
- //
- // Form1
- //
- this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
- this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
- this->ClientSize = System::Drawing::Size(998, 479);
- this->Controls->Add(this->pbTransfImage);
- this->Controls->Add(this->pbOrigImage);
- this->Controls->Add(this->menuStrip1);
- this->MainMenuStrip = this->menuStrip1;
- this->Name = L"Form1";
- this->Text = L"Operatiuni punctuale";
- this->menuStrip1->ResumeLayout(false);
- this->menuStrip1->PerformLayout();
- (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbOrigImage))->EndInit();
- (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pbTransfImage))->EndInit();
- this->ResumeLayout(false);
- this->PerformLayout();
- }
- #pragma endregion
- private: void enableOpMenu(bool enable)
- {
- fourierToolStripMenuItem->Enabled;
- filterToolStripMenuItem->Enabled;
- }
- private: void freeMem()
- {
- if(ptrImage)
- {
- for(int i = 0; i < h; i++)
- delete[] ptrImage[i];
- delete[] ptrImage;
- ptrImage = 0;
- }
- }
- private: System::Void openImageToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
- freeMem();
- if(this->openFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){
- String^ fileName = openFileDialog->FileName;
- if(fileName->Contains(".pgm")){
- char *ptrFileName = new char[fileName->Length+1];
- int i;
- for(i = 0; i < fileName->Length; i++)
- ptrFileName[i] = (char)fileName[i];
- ptrFileName[i] = '\0';
- int width, height;
- ptrImage = load_image_data(ptrFileName, width, height);
- w = width;
- h = height;
- bmpImage = gcnew Bitmap(h, w);
- for(int i = 0; i < h; i++)
- for(int j = 0; j < w; j++){
- bmpImage->SetPixel(i, j, Color::FromArgb(ptrImage[i][j], ptrImage[i][j], ptrImage[i][j]));
- }
- }else{
- bmpImage = gcnew Bitmap(fileName);
- h = bmpImage->Width;
- w = bmpImage->Height;
- ptrImage = new unsigned char*[h];
- for(int i = 0; i < h; i++){
- ptrImage[i] = new unsigned char[w];
- for(int j = 0; j < w; j++)
- ptrImage[i][j] = (unsigned char)((bmpImage->GetPixel(i, j).R + bmpImage->GetPixel(i, j).G + bmpImage->GetPixel(i, j).B)/3.);
- }
- }
- if(bmpImage){
- this->pbOrigImage->Image = bmpImage;
- //SizeF scaleFactor((float)bmpImage->Width/this->pbOrigImage->Width, (float)bmpImage->Height/this->pbOrigImage->Height);
- //this->pbOrigImage->Scale(scaleFactor);
- //this->pbTransfImage->Width = this->pbOrigImage->Width;
- //this->pbTransfImage->Height = this->pbOrigImage->Height;
- this->pbOrigImage->Location = Point(10, 40);
- int locX = this->pbOrigImage->Location.X + this->pbOrigImage->Width + 80;
- this->pbTransfImage->Location = Point(locX, this->pbOrigImage->Location.Y);
- enableOpMenu(true);
- bmpResultImage = gcnew Bitmap(h, w);
- this->pbOrigImage->SizeMode = PictureBoxSizeMode::StretchImage;
- this->pbTransfImage->SizeMode = PictureBoxSizeMode::StretchImage;
- }
- }
- }
- private: System::Void exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
- freeMem();
- Application::Exit();
- }
- private: Complex** calculFourier(unsigned char **img, int w, int h)
- {
- const double PI = 3.14;
- Complex **tmp = new Complex*[w];
- for (int i = 0; i < w; i++)
- tmp[i] = new Complex[h];
- for (int u = 0; u < w; u++)
- {
- for (int v = 0; v < h; v++)
- {
- float re = 0, im = 0;
- for (int x = 0; x < w; x++)
- {
- for (int y = 0; y < h; y++)
- {
- float exponent = 2*PI*(u*x/w + v*y/h);
- re += img[x][y] * cos(exponent);
- im += img[x][y] * sin(-exponent);
- }
- }
- tmp[u][v].setRe(re);
- tmp[u][v].setIm(im);
- }
- }
- return tmp;
- }
- private: System::Void fourierToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
- {
- Complex **fourier = calculFourier(ptrImage, w, h);
- for (int i = 0; i < w/2; i++)
- for (int j = 0; j < h/2; j++)
- {
- Complex aux = fourier[i][j];
- fourier[i][j] = fourier[i+w/2][j+h/2];
- fourier[i+w/2][j+h/2] = aux;
- }
- for (int i = 0; i < w/2; i++)
- for (int j = h/2; j < h; j++)
- {
- Complex aux = fourier[i][j];
- fourier[i][j] = fourier[i+w/2][j-h/2];
- fourier[i+w/2][j-h/2] = aux;
- }
- float **modul = new modul*[w];
- for (int i = 0; i < w; i++)
- modul[i] = new float[h];
- for (int i = 0; i < w; i++)
- for (int j = 0; j < h; j++)
- {
- modul[i][j] = fourier[i][j]->abs();
- }
- for(int r = 0; r < h; r++)
- for(int c = 0; c < w; c++)
- {
- unsigned char result = 0;
- bmpResultImage->SetPixel(r, c, Color::FromArgb(result, result, result));
- }
- pbTransfImage->Image = bmpResultImage;
- }
- private: System::Void inverseToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
- {
- for(int r = 0; r < h; r++)
- for(int c = 0; c < w; c++)
- {
- unsigned char result = 0;
- bmpResultImage->SetPixel(r, c, Color::FromArgb(result, result, result));
- }
- pbTransfImage->Image = bmpResultImage;
- }
- private: System::Void filterToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
- {
- for(int r = 0; r < h; r++)
- for(int c = 0; c < w; c++)
- {
- unsigned char result = 0;
- bmpResultImage->SetPixel(r, c, Color::FromArgb(result, result, result));
- }
- pbTransfImage->Image = bmpResultImage;
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement