From aee4533e118bd1c9e92ddf4f9011bff28f807d29 Mon Sep 17 00:00:00 2001
From: Antoine Pazat <antoine.pazat@gmail.com>
Date: Fri, 24 Jun 2016 13:53:12 +0200
Subject: [PATCH] modification CMakeLists pour que les sources compilent

---
 CMakeLists.txt                  |  23 ++++-
 app/Services/FilteringService.h |   2 +
 core/CMakeLists.txt             |  12 +++
 plugins/CMakeLists.txt          |   2 +
 plugins/Median/Median.cpp       | 167 ++++++++++++++++++++++++++++++++
 plugins/Median/Median/main.cpp  |  31 ++++++
 plugins/Median/Median/main.h    |  28 ++++++
 7 files changed, 263 insertions(+), 2 deletions(-)
 create mode 100644 plugins/Median/Median.cpp
 create mode 100644 plugins/Median/Median/main.cpp
 create mode 100644 plugins/Median/Median/main.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 640d3c2..9657a6b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,11 +1,18 @@
 project(ImageINSA)
 cmake_minimum_required(VERSION 2.8.11)
 
+set(CMAKE_BUILD_TYPE "Release")
 # Find includes in corresponding build directories
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 # Instruct CMake to run moc automatically when needed.
 set(CMAKE_AUTOMOC ON)
 
+#Modif Pazat : repertoire contenant les fichiers de configuration .cmake pour QT5. !!! Modifier le chemin pour qu'il dépende des variables d'environnement !!!
+#set (CMAKE_PREFIX_PATH "C:\\Qt\\Qt5.6.1\\5.6\\msvc2015_64\\lib\\cmake\\")
+
+#Modif Pazat : repertoire contenant les fichiers de configuration .cmake pour QT5.
+set (CMAKE_PREFIX_PATH "C:\\Qt\\Qt5.6.1\\5.6\\mingw49_32\\lib\\cmake")
+
 # Find the Qt libraries
 find_package(Qt5Core REQUIRED)
 find_package(Qt5Gui REQUIRED)
@@ -24,6 +31,8 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DEPLOY_OUTPUT_DIRECTORY}/lib)
 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DEPLOY_OUTPUT_DIRECTORY}/lib)
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DEPLOY_OUTPUT_DIRECTORY})
 
+set (CMAKE_PREFIX_PATH "C:\\RandomLib-mingw32")
+
 # Find RandomLib, which must be built and installed before running this compilation
 find_package(RandomLib 1.7 REQUIRED)
 if(RandomLib_FOUND)
@@ -45,6 +54,10 @@ else()
 		"for Detiq-T (ImageIn & GenericInterface libraries), and re-run CMake.")
 endif()
 
+set (CMAKE_MODULE_PATH "C:\\Program Files\\CMake\\share\\cmake-3.6\\Modules\\")
+set (CMAKE_PREFIX_PATH "C:\\Program Files (x86)\\GnuWin32\\")
+
+
 find_package(JPEG)
 if(JPEG_FOUND)
 	include_directories(${JPEG_INCLUDE_DIR})
@@ -63,8 +76,14 @@ find_package(Threads REQUIRED)
 
 # Simple inclusion, more control have already been performed
 # in previous Detiq-T lookup (GenericInterface)
-find_package(Qwt 6.0)
-include_directories(${QWT_INCLUDE_DIRS})
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
+set(CMAKE_PREFIX_PATH "C:\\Qwt-6.1.2\\")
+set(QWT_LIBRARY "C:\\Qwt-6.1.2\\lib\\qwt.dll")
+set(QWT_INCLUDE_DIR "C:\\Qwt-6.1.2\\include")
+
+find_package(Qwt 6.0 REQUIRED)
+	include_directories(${QWT_INCLUDE_DIRS})
+
 
 add_subdirectory(core)
 include_directories(core)
diff --git a/app/Services/FilteringService.h b/app/Services/FilteringService.h
index c6c9a55..8b18b57 100644
--- a/app/Services/FilteringService.h
+++ b/app/Services/FilteringService.h
@@ -28,7 +28,9 @@
 #include "Widgets/FilterEditor.h"
 
 #include <QStringList>
+#ifdef __linux__
 #include <pthread.h>
+#endif
 
 namespace filtrme
 {
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index 9c2db83..b53623e 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -1,6 +1,18 @@
 
 find_package(Qt5Widgets REQUIRED)
 
+ set(CMAKE_PREFIX_PATH "C:\\Qwt-6.1.2\\")
+ #set(QWT_LIBRARY "C:\\Qwt-6.1.2\\lib\\qwt.dll")
+set(QWT_LIBRARY C:/Qwt-6.1.2/lib/qwt.dll)
+ set(QWT_INCLUDE_DIR "C:\\Qwt-6.1.2\\include")
+
+find_package(Qwt 6.0 REQUIRED)
+if(QWT_FOUND)
+	include_directories(${QWT_INCLUDE_DIRS})
+else()
+	message(FATAL_ERROR "Cannot find Qwt library. Please add the Qwt library directory to CMAKE_PREFIX_PATH.")
+endif()
+
 set(SRCS
 	BuiltinOpSet.cpp
 	BuiltinOpSet.h
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 2fd2686..ca4f8dd 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -18,3 +18,5 @@ target_link_libraries(segmentationTest core)
 add_library(entropy SHARED Entropy/Entropy.cpp)
 target_link_libraries(entropy core)
 
+add_library(median SHARED Median/Median.cpp)
+target_link_libraries(median core)
diff --git a/plugins/Median/Median.cpp b/plugins/Median/Median.cpp
new file mode 100644
index 0000000..6bf6a4e
--- /dev/null
+++ b/plugins/Median/Median.cpp
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2011-2012 INSA Rennes
+ *
+ * This file is part of EIImage.
+ *
+ * EIImage is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * EIImage is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with EIImage.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <iostream>
+#include <string>
+#include <algorithm>
+
+#include "Image.h"
+#include "Converter.h"
+
+#include "Operation.h"
+#include "Plugin.h"
+#include "ImgParam.h"
+#include "IntParam.h"
+#include "PlugOperation.h"
+
+#include <cstring>
+#include <cstdio>
+#include <cmath>
+#include <vector>
+#include <algorithm>
+
+using namespace std;
+using namespace imagein;
+
+class MedianCroix : public PlugOperation {
+  public:
+    MedianCroix() : PlugOperation("MedianCroix") {
+        addParam(CurrentImg(), &MedianCroix::img);
+        addParam(IntParam("Taille",1,30,3),&MedianCroix::wSide);
+    }
+    void operation() {
+        Image *outputImage = new Image(img);
+        unsigned int histo[256];
+        unsigned int imageWidth = img.getWidth();
+        unsigned int imageHeight = img.getHeight();
+        unsigned int nbChannels = img.getNbChannels();
+        int iStart, iStop, jStart, jStop;
+
+   // parcours des composantes de couleur
+    for (int c=0;c<nbChannels;c++){
+
+        // parcours de l'image
+        for (int x=0;x<imageWidth;x++){
+            for(int y=0;y<imageHeight;y++){
+                    //parcours de la fenêtre du filtre
+
+                    x-wSide/2 < 0 ? iStart = 0 : iStart = x-wSide/2;
+                    x+wSide/2 > imageWidth-1 ? iStop = imageWidth : iStop = x+wSide/2+1;
+                    y-wSide/2 < 0 ? jStart = 0 : jStart = y-wSide/2;
+                    y+wSide/2 > imageHeight-1 ? jStop = imageHeight : jStop = y+wSide/2+1;
+
+
+                    for(int i=iStart; i< iStop ; i++){
+                        for(int j=jStart;j<jStop;j++){
+                            //remplissage de la fenêtre du filtre
+                            if (i==x || j==y)window.push_back(img.getPixelAt(i,j,c));
+
+                        }//j
+                    }//i
+
+                size_t size = window.size();
+                sort(window.begin(), window.begin()+size);
+                outputImage->setPixelAt(x, y, c, window[size/2]);
+                window.clear();
+            }//y
+        }//x
+    }//c
+
+        //conversion de la taille de la fenêtre en string pour l'affichage de l'image résultat
+        string str;
+        ostringstream convert;
+        convert << wSide;
+        str = convert.str();
+
+        outImage(outputImage, "Image filtered (median"+str+"x"+str+")");
+    }
+  private:
+    Image img;
+    int wSide;//largeur de la fenêtre
+    vector<int> window;
+};
+
+class MedianCarre : public PlugOperation {
+  public:
+    MedianCarre() : PlugOperation("MedianCarre") {
+        addParam(CurrentImg(), &MedianCarre::img);
+        addParam(IntParam("Taille",1,30,3),&MedianCarre::wSide);
+    }
+
+    void operation() {
+        Image *outputImage = new Image(img);
+        unsigned int histo[256];
+        unsigned int imageWidth = img.getWidth();
+        unsigned int imageHeight = img.getHeight();
+        unsigned int nbChannels = img.getNbChannels();
+        int iStart, iStop, jStart, jStop;
+        int i,j;
+
+       // parcours des composantes de couleur
+    for (int c=0;c<nbChannels;c++){
+
+        // parcours de l'image
+        for (int x=0;x<imageWidth;x++){
+            for(int y=0;y<imageHeight;y++){
+                    //parcours de la fenêtre du filtre
+
+                    x-wSide/2 < 0 ? iStart = 0 : iStart = x-wSide/2;
+                    x+wSide/2 > imageWidth-1 ? iStop = imageWidth : iStop = x+wSide/2+1;
+                    y-wSide/2 < 0 ? jStart = 0 : jStart = y-wSide/2;
+                    y+wSide/2 > imageHeight-1 ? jStop = imageHeight : jStop = y+wSide/2+1;
+
+                    for(i=iStart; i< iStop ; i++){
+                        for(j=jStart;j<jStop;j++){
+                            //remplissage de la fenêtre du filtre
+                            window.push_back(img.getPixelAt(i,j,c));
+                        }//j
+                    }//i
+
+                size_t size = window.size();
+                sort(window.begin(), window.begin()+size);
+                outputImage->setPixelAt(x, y, c, window[size/2]);
+                window.clear();
+            }//y
+        }//x
+    }//c
+
+        //conversion de la taille de la fenêtre en string pour l'affichage de l'image résultat
+        string str;
+        ostringstream convert;
+        convert << wSide;
+        str = convert.str();
+
+        outImage(outputImage, "Image filtered (median"+str+"x"+str+")");
+    }
+  private:
+    Image img;
+    int wSide;//largeur de la fenêtre
+    vector<int> window;
+};
+
+extern "C" Plugin* loadPlugin() {
+    Plugin* plugin = new Plugin("Median");
+    plugin->addOperation(new MedianCroix());
+    plugin->addOperation(new MedianCarre());
+    return plugin;
+}
+
+extern "C" void unloadPlugin(Plugin* plugin) {
+    delete plugin;
+}
diff --git a/plugins/Median/Median/main.cpp b/plugins/Median/Median/main.cpp
new file mode 100644
index 0000000..9563a95
--- /dev/null
+++ b/plugins/Median/Median/main.cpp
@@ -0,0 +1,31 @@
+#include "main.h"
+
+// a sample exported function
+void DLL_EXPORT SomeFunction(const LPCSTR sometext)
+{
+    MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION);
+}
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+    switch (fdwReason)
+    {
+        case DLL_PROCESS_ATTACH:
+            // attach to process
+            // return FALSE to fail DLL load
+            break;
+
+        case DLL_PROCESS_DETACH:
+            // detach from process
+            break;
+
+        case DLL_THREAD_ATTACH:
+            // attach to thread
+            break;
+
+        case DLL_THREAD_DETACH:
+            // detach from thread
+            break;
+    }
+    return TRUE; // succesful
+}
diff --git a/plugins/Median/Median/main.h b/plugins/Median/Median/main.h
new file mode 100644
index 0000000..2bd887e
--- /dev/null
+++ b/plugins/Median/Median/main.h
@@ -0,0 +1,28 @@
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+#include <windows.h>
+
+/*  To use this exported function of dll, include this header
+ *  in your project.
+ */
+
+#ifdef BUILD_DLL
+    #define DLL_EXPORT __declspec(dllexport)
+#else
+    #define DLL_EXPORT __declspec(dllimport)
+#endif
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+void DLL_EXPORT SomeFunction(const LPCSTR sometext);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __MAIN_H__
-- 
GitLab