예제 #1
0
        /// <summary>
        /// Affiche le menu entier
        /// </summary>
        static void ShowMenu()
        {
            bool Restart = true;

            while (Restart)
            {
                string choixfinal = "";
                int    choixTd    = 0;
                Restart = false;

                #region Introduction
                Console.BackgroundColor = ConsoleColor.White;
                Console.ForegroundColor = ConsoleColor.Black;
                Console.Clear();
                string Welcomemsg = "Bienvenue sur le projet de traitement d'images !";
                string Enter      = "Veuillez  appuyer sur entrée pour commencer...";
                Console.SetCursorPosition((Console.WindowWidth - Welcomemsg.Length) / 2, 1);
                Console.WriteLine(Welcomemsg);
                Console.SetCursorPosition((Console.WindowWidth - Enter.Length) / 2, Console.WindowHeight / 2);
                Console.WriteLine(Enter);

                while (Console.ReadKey().Key != ConsoleKey.Enter)
                {
                    Console.SetCursorPosition((Console.WindowWidth - Welcomemsg.Length) / 2, 1);
                    Console.WriteLine(Welcomemsg);
                    Console.SetCursorPosition((Console.WindowWidth - Enter.Length) / 2, Console.WindowHeight / 2);
                    Console.WriteLine(Enter);
                    Console.ReadKey();
                }
                #endregion

                #region ChoixTD
                int      ligne  = 0;
                bool     end    = false;
                string[] tabTds = { "TD 2 - Manipulations", "TD 3 - Filtres", "TD 4 - Formes et histogrammes", "TD 5 - Innovation" };
                while (!end)
                {
                    Console.Clear();
                    string choixTD = "Veuillez sélectionner sur quel TD vous allez traiter votre image.\n\n\n\n\n";
                    Console.SetCursorPosition((Console.WindowWidth - choixTD.Length) / 2, Console.CursorTop);
                    Console.WriteLine(choixTD);
                    for (int i = 0; i < tabTds.Length; i++)
                    {
                        if (ligne == i)
                        {
                            if (i == tabTds.Length - 1)
                            {
                                Console.ForegroundColor = ConsoleColor.Cyan;
                            }
                            else
                            {
                                Console.ForegroundColor = ConsoleColor.Green;
                            }
                            Console.Write("  -¤-  ");
                            choixTd = i + 2;
                        }
                        else
                        {
                            Console.Write("     ");
                        }
                        Console.WriteLine(tabTds[i]);
                        if (ligne == i)
                        {
                            Console.ForegroundColor = ConsoleColor.Black;
                        }
                    }
                    switch (Console.ReadKey().Key)
                    {
                    case ConsoleKey.Enter:
                        end = true;
                        break;

                    case ConsoleKey.UpArrow:
                        ligne--;
                        if (ligne < 0)
                        {
                            ligne = tabTds.Length - 1;
                        }
                        break;

                    case ConsoleKey.DownArrow:
                        ligne++;
                        if (ligne > tabTds.Length - 1)
                        {
                            ligne = 0;
                        }
                        break;
                    }
                }
                #endregion

                #region ChoixTraitement
                ligne = 0;
                end   = false;
                bool          PickImage  = true;
                List <string> Parameters = new List <string>();
                switch (choixTd)
                {
                case 2:
                    Parameters.AddRange(new string[] { "Agrandir", "Rétrecir", "Nuances de gris", "Noir et Blanc", "Superposition" });
                    break;

                case 3:
                    Parameters.AddRange(new string[] { "Repoussage", "Détection de contours", "Flou", "Contraste", "Renforcement de contours" });
                    break;

                case 4:
                    Parameters.AddRange(new string[] { "Image forme triangle", "Image forme triangle inversé", "Image forme carrée", "Histogrammes" });
                    break;

                case 5:
                    Parameters.AddRange(new string[] { "Réflexion géometrique", "HDR", "Double Exposition" });
                    break;
                }
                while (!end)
                {
                    Console.Clear();
                    string choixTraitement = "Veuillez sélectionner votre choix de traitement.\n\n\n\n\n";
                    Console.SetCursorPosition((Console.WindowWidth - choixTraitement.Length) / 2, Console.CursorTop);
                    Console.WriteLine(choixTraitement);
                    for (int i = 0; i < Parameters.Count; i++)
                    {
                        if (ligne == i)
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.Write("  -¤-  ");
                            choixfinal = Parameters[i];
                        }
                        else
                        {
                            Console.Write("     ");
                        }
                        Console.WriteLine(Parameters[i]);
                        if (ligne == i)
                        {
                            Console.ForegroundColor = ConsoleColor.Black;
                        }
                    }
                    switch (Console.ReadKey().Key)
                    {
                    case ConsoleKey.Enter:
                        end = true;
                        break;

                    case ConsoleKey.UpArrow:
                        ligne--;
                        if (ligne < 0)
                        {
                            ligne = Parameters.Count - 1;
                        }
                        break;

                    case ConsoleKey.DownArrow:
                        ligne++;
                        if (ligne > Parameters.Count - 1)
                        {
                            ligne = 0;
                        }
                        break;
                    }
                }
                if ((choixTd == 4 && choixfinal != "Histogrammes") || (choixTd == 5 && choixfinal != "Réflexion géometrique"))
                {
                    PickImage = false;
                }
                #endregion

                #region ChoixImage
                MyImage Work     = new MyImage("Resultat.bmp");
                string  filename = "";
                if (PickImage)
                {
                    Console.Clear();
                    string imgChoice = "Veuillez choisir l'image en tapant son nom ainsi que son extension...";
                    string warning   = "Attention ne choisissez que des images présentent dans le dossier Debug du projet !";
                    Console.SetCursorPosition((Console.WindowWidth - imgChoice.Length) / 2, 1);
                    Console.WriteLine(imgChoice);
                    Console.SetCursorPosition((Console.WindowWidth - warning.Length) / 2, 3);
                    Console.WriteLine(warning);
                    string[] filenamesPossible = { "bear(W).bmp", "bird(W).bmp", "china(DE).bmp", "circle tree.bmp", "coco.bmp", "fogforest(DE).bmp", "girl.bmp", "lac_en_montagne.bmp", "italia.bmp", "lion(W).bmp", "lena.bmp", "lakeReflection(DE).bmp", "men(W).bmp", "mountains.bmp", "Mystic(DE).bmp", "MysticForest(DE).bmp", "lake.bmp", "lake+2.bmp", "lake-2.bmp", "lake-4.bmp", "trees(DE).bmp", "treeRoute.bmp", "Paris.bmp", "Paris+2.bmp", "Paris+4.bmp", "Paris-2.bmp", "rose.bmp", "rose+2.bmp", "rose+4.bmp", "rose-2.bmp", "skyscrappers(DE).bmp", "volcano(DE).bmp", "volcano2.bmp", "women(W).bmp" };
                    filename = Console.ReadLine();
                    bool Validate = false;
                    int  compteur = 0;
                    while (!Validate)
                    {
                        if (compteur != 0)
                        {
                            Console.Clear();
                            string Warning = "Le nom ne correspond à aucune image dans le dossier, rééssayez !";
                            Console.SetCursorPosition((Console.WindowWidth - Warning.Length) / 2, 3);
                            Console.WriteLine(Warning);
                            filename = Console.ReadLine();
                        }
                        for (int i = 0; i < filenamesPossible.Length; i++)
                        {
                            if (filename == filenamesPossible[i])
                            {
                                Validate = true;
                                break;
                            }
                        }
                        compteur++;
                    }
                    Work = new MyImage(filename);
                    Console.Clear();
                    if (Work.PropLargeur >= 1000 || Work.PropHauteur >= 1000)
                    {
                        Console.WriteLine("L'image est assez grande, il se peut que certains traitement prennent jusqu'à quelques secondes...");
                    }
                }

                #endregion

                #region Traitement
                Console.Clear();
                if (choixTd == 2)
                {
                    switch (choixfinal)
                    {
                    case "Agrandir":
                        Console.WriteLine("Choisissez votre pourcentage d'agrandissement de la hauteur multiple de 20, 50 ou 100 % !\n\n");
                        int Phauteur = int.Parse(Console.ReadLine());
                        while (Phauteur % 20 != 0 && Phauteur % 50 != 0)
                        {
                            Console.Write("Cette agrandissement est impossible, veuillez choisir un pourcentage d'agrandissement de la hauteur multiple de 20, 50 ou 100 % !\n\n");
                            Phauteur = int.Parse(Console.ReadLine());
                        }
                        if (Phauteur != 0)
                        {
                            while (Phauteur >= 100)
                            {
                                Work      = Work.AgrandirHauteur(100);
                                Phauteur -= 100;
                            }
                            if (Phauteur == 50)
                            {
                                Work = Work.AgrandirHauteur(50);
                            }
                            else
                            {
                                while (Phauteur >= 20)
                                {
                                    Work      = Work.AgrandirHauteur(20);
                                    Phauteur -= 20;
                                }
                            }
                        }
                        Console.WriteLine("Choisissez votre pourcentage d'agrandissement de la largeur (20, 50 ou 100 %) !\n\n");
                        int Plargeur = int.Parse(Console.ReadLine());
                        while (Plargeur % 20 != 0 && Plargeur % 50 != 0)
                        {
                            Console.Write("Cette agrandissement est impossible, veuillez choisir votre pourcentage d'agrandissement de la largeur (20, 50 ou 100 %) !\n\n");
                            Plargeur = int.Parse(Console.ReadLine());
                        }
                        if (Plargeur != 0)
                        {
                            while (Plargeur >= 100)
                            {
                                Work      = Work.AgrandirLargeur(100);
                                Plargeur -= 100;
                            }
                            if (Plargeur == 50)
                            {
                                Work = Work.AgrandirLargeur(50);
                            }
                            else
                            {
                                while (Plargeur >= 20)
                                {
                                    Work      = Work.AgrandirLargeur(20);
                                    Plargeur -= 20;
                                }
                            }
                        }
                        Work.From_Image_To_File("Resultat.bmp");
                        break;

                    case "Rétrecir":
                        Console.WriteLine("Choisissez votre pourcentage de rétrécissement (20 ou 50 %) !\n\n");
                        int pourcentage = int.Parse(Console.ReadLine());
                        while (pourcentage != 20 && pourcentage != 50)
                        {
                            Console.WriteLine("Ce rétrécissement est impossible, veuillez choisir votre pourcentage de rétrécissement (20 ou 50 %) !\n\n");
                            pourcentage = int.Parse(Console.ReadLine());
                        }
                        Work = Work.Retrecir(pourcentage);
                        Work.From_Image_To_File("Resultat.bmp");
                        break;

                    case "Nuances de gris":
                        Work.ColorToGreys();
                        Work.From_Image_To_File("Resultat.bmp");
                        break;

                    case "Noir et Blanc":
                        Work.NoirEtBlanc();
                        Work.From_Image_To_File("Resultat.bmp");
                        break;

                    case "Superposition":
                        Console.Clear();
                        string imgChoice = "Veuillez choisir la deuxième image en tapant son nom ainsi que son extension...";
                        string warning   = "Attention ne choisissez que des images présentent dans le dossier Debug du projet !";
                        Console.SetCursorPosition((Console.WindowWidth - imgChoice.Length) / 2, 1);
                        Console.WriteLine(imgChoice);
                        Console.SetCursorPosition((Console.WindowWidth - warning.Length) / 2, 3);
                        Console.WriteLine(warning);
                        string[] filenamesPossible = { "bear(W).bmp", "bird(W).bmp", "china(DE).bmp", "circle tree.bmp", "coco.bmp", "fog forest(DE).bmp", "lac_en_montagne.bmp", "italia.bmp", "lena.bmp", "mountains.bmp", "Mystic(DE).bmp", "MysticForest(DE).bmp", "lake.bmp", "lake+2.bmp", "lake-2.bmp", "lake-4.bmp", "trees(DE).bmp", "treeRoute.bmp", "girl.bmp", "lion(W).bmp", "men(W).bmp", "lakeReflection(DE).bmp", "Paris.bmp", "Paris+2.bmp", "Paris+4.bmp", "Paris-2.bmp", "rose.bmp", "rose+2.bmp", "rose+4.bmp", "rose-2.bmp", "skyscrappers(DE).bmp", "volcano(DE).bmp", "volcano2.bmp", "women(W).bmp" };
                        string   Filename          = Console.ReadLine();
                        bool     Validate          = false;
                        int      compteur          = 0;
                        while (!Validate)
                        {
                            if (compteur != 0)
                            {
                                Console.Clear();
                                string Warning = "Le nom ne correspond à aucune image dans le dossier, rééssayez !";
                                Console.SetCursorPosition((Console.WindowWidth - Warning.Length) / 2, 3);
                                Console.WriteLine(Warning);
                                Filename = Console.ReadLine();
                            }
                            for (int i = 0; i < filenamesPossible.Length; i++)
                            {
                                if (Filename == filenamesPossible[i])
                                {
                                    Validate = true;
                                    break;
                                }
                            }
                            compteur++;
                        }
                        MyImage Superpose = new MyImage(Filename);
                        if (Work.PropHauteur >= Superpose.PropHauteur || Work.PropLargeur >= Superpose.PropLargeur)
                        {
                            Work.Superposition(Filename).From_Image_To_File("Resultat.bmp");
                        }
                        else
                        {
                            Superpose.Superposition(filename).From_Image_To_File("Resultat.bmp");
                        }
                        break;
                    }
                    Process.Start("Resultat.bmp");
                }

                else if (choixTd == 3)
                {
                    int[,] kernel = Get3x3Kernel(choixfinal);
                    Work.ApplyFilter(kernel);
                    Work.From_Image_To_File("Resultat.bmp");
                    Process.Start("Resultat.bmp");
                }

                else if (choixTd == 4)
                {
                    if (choixfinal != "Histogrammes")
                    {
                        Console.WriteLine("Choisissez votre hauteur ! (les dimensions doivent respecter : 2 x largeur > hauteur)\n\n");
                        int hauteur = int.Parse(Console.ReadLine());
                        Console.WriteLine("Choisissez votre largeur !\n\n");
                        int largeur = int.Parse(Console.ReadLine());
                        while (2 * largeur <= hauteur)
                        {
                            Console.Write("Vous ne respectez pas les conditions ! Veuillez choisir à nouveau.\n\n");
                            Console.WriteLine("Choisissez votre hauteur ! (les dimensions doivent respecter : 2 x largeur > hauteur)\n\n");
                            hauteur = int.Parse(Console.ReadLine());
                            Console.WriteLine("Choisissez votre largeur !\n\n");
                            largeur = int.Parse(Console.ReadLine());
                        }
                        MyImage res = new MyImage(hauteur, largeur);
                        switch (choixfinal)
                        {
                        case "Image forme triangle":
                            res.FormeTriangle();
                            break;

                        case "Image forme triangle inversé":
                            res.FormeTriangle();
                            res.Rotation(180);
                            break;

                        case "Image forme carrée":
                            res.FormeCarree();
                            break;
                        }
                        res.From_Image_To_File("Resultat.bmp");
                        Process.Start("Resultat.bmp");
                    }
                    else
                    {
                        Work.ColorsToHistograms();
                    }
                }

                else
                {
                    switch (choixfinal)
                    {
                    case "Réflexion géometrique":
                        Console.WriteLine("Choisissez votre forme (carré, triangle ou triangle inversé) !");
                        string forme = Console.ReadLine();
                        while (forme != "carré" && forme != "triangle" && forme != "triangle inversé")
                        {
                            Console.WriteLine("Ce n'est pas possible ! Veuillez choisir une forme conforme");
                            forme = Console.ReadLine();
                        }
                        Work.GeometricReflection(forme);
                        Work.From_Image_To_File("Resultat.bmp");
                        Process.Start("Resultat.bmp");
                        break;

                    case "HDR":
                        Console.WriteLine("Choisissez votre suite d'images à différentes exposition (Paris, rose ou lake) !");
                        string choix = Console.ReadLine();
                        while (choix != "Paris" && choix != "rose" && choix != "lake")
                        {
                            Console.WriteLine("Ce n'est pas possible, veuillez choisir la bonne suite d'images !");
                            choix = Console.ReadLine();
                        }
                        if (choix == "Paris")
                        {
                            string[] tab = { "Paris-2.bmp", "Paris.bmp", "Paris+2.bmp", "Paris+4.bmp" };
                            Console.Clear();
                            Console.WriteLine("L'HDR est un processus qui peut durer jusqu'à 1 minute étant donné la taille des images...");
                            ShowHDR(tab);
                        }
                        else if (choix == "rose")
                        {
                            string[] tab = { "rose-2.bmp", "rose.bmp", "rose+2.bmp", "rose+4.bmp" };
                            Console.Clear();
                            Console.WriteLine("L'HDR est un processus qui peut durer jusqu'à 1 minute étant donné la taille des images...");
                            ShowHDR(tab);
                        }
                        else if (choix == "lake")
                        {
                            string[] tab = { "lake-4.bmp", "lake-2.bmp", "lake.bmp", "lake+2.bmp" };
                            Console.Clear();
                            Console.WriteLine("L'HDR est un processus qui peut durer jusqu'à 1 minute étant donné la taille des images...");
                            ShowHDR(tab);
                        }
                        break;

                    case "Double Exposition":
                        Console.WriteLine("Choisissez votre image qui servira de remplissage (label DE) !");
                        string item = Console.ReadLine();
                        while (item[item.Length - 6] != 'E')
                        {
                            Console.WriteLine("Ce n'est pas une image autorisée pour ce traitement !");
                            item = Console.ReadLine();
                        }
                        Console.WriteLine("Choisissez votre image qui servira de masque (sur fond blanc) !");
                        string mask = Console.ReadLine();
                        while (mask[mask.Length - 6] != 'W')
                        {
                            Console.WriteLine("Ce n'est pas une image autorisée pour ce traitement !");
                            mask = Console.ReadLine();
                        }
                        ShowDoubleExposure(mask, item);
                        break;
                    }
                }
                #endregion

                Console.Clear();
                string endmsg = "Voulez-vous recommencer (en indiquant oui) ? ";
                Console.SetCursorPosition((Console.WindowWidth - endmsg.Length) / 2, 1);
                Console.WriteLine(endmsg);
                if (Console.ReadLine() == "oui")
                {
                    Restart = true;
                }
                else
                {
                    Console.WriteLine("Merci d'avoir utilisé le projet de traitement d'images, à bientôt !");
                }
            }
        }