Пример #1
0
        /// <summary>
        /// Cette première innovation est un filtre qui affiche une image à la Andy Warhol
        /// </summary>
        public void Innovation1()
        {
            int     larg     = this.image.GetLength(0);
            int     haut     = this.image.GetLength(1);
            MyImage newimage = new MyImage(2 * larg, 2 * haut);

            int[,] moyennes = new int[larg, haut];
            for (int i = 0; i < image.GetLength(0); i++)
            {
                for (int j = 0; j < image.GetLength(1); j++)
                {
                    int moyenne = (image[i, j].Rouge + image[i, j].Vert + image[i, j].Bleu) / 3; ///on réutilise une partie de la fonction nuance de gris
                    moyennes[i, j] = moyenne;
                }
            }


            for (int i = 0; i < larg; i++)
            {
                for (int j = 0; j < haut; j++)
                {
                    newimage.image[i, j]               = new Pixel(moyennes[i, j], moyennes[i, j] / 5, moyennes[i, j] / 5); ///on rajoute de petites valeurs pour que l'image soit plus claire
                    newimage.image[i + larg, j]        = new Pixel(0, moyennes[i, j], 0);
                    newimage.image[i, j + haut]        = new Pixel(moyennes[i, j] / 3, moyennes[i, j] / 3, moyennes[i, j]); ///pareil pour le bleu
                    newimage.image[i + larg, j + haut] = new Pixel(0, moyennes[i, j], moyennes[i, j]);
                }
            }
            Enregistrement(newimage.image);
        }
Пример #2
0
        /// <summary>
        /// Main qui permet de lancer toutes les méthodes. C'est un menu déroulant
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            bool execute = true;

            while (execute == true)
            {
                #region Menu Textuel
                Console.Clear();
                Console.WriteLine("\nChoissisez au clavier une des sous-parties :\n" +
                                  "\n- Opérations géometriques    (a)" +
                                  "\n- Gris et couleurs           (b)" +
                                  "\n- Matrices de convolution    (c)" +
                                  "\n- Divers                     (d)" +
                                  "\n- Innovations...             (e)" +
                                  "\n\nFermer la console            (f)");
                ConsoleKeyInfo choixUtilisateur;
                do
                {
                    choixUtilisateur = Console.ReadKey(true);
                }
                #endregion

                while (choixUtilisateur.Key != ConsoleKey.A && choixUtilisateur.Key != ConsoleKey.B &&
                       choixUtilisateur.Key != ConsoleKey.C && choixUtilisateur.Key != ConsoleKey.D && choixUtilisateur.Key != ConsoleKey.E && choixUtilisateur.Key != ConsoleKey.F);

                if (choixUtilisateur.Key == ConsoleKey.A)
                {
                    #region Menu Textuel
                    Console.Clear();
                    Console.WriteLine("\n     [Opérations géometriques]" +
                                      "\n" +
                                      "\n- Miroir                      (a)" +
                                      "\n- Agrandir                    (b)" +
                                      "\n- Rotation                    (c)" +
                                      "\n- Rétrécir horizontallement   (d)" +
                                      "\n- Rétrécir verticallement     (e)" +
                                      "\n- Rétrécir globalement        (f)");
                    #endregion

                    #region Boutons pour lancer les méthodes
                    do
                    {
                        choixUtilisateur = Console.ReadKey(true);
                    }while (choixUtilisateur.Key != ConsoleKey.A && choixUtilisateur.Key != ConsoleKey.B &&
                            choixUtilisateur.Key != ConsoleKey.C && choixUtilisateur.Key != ConsoleKey.D && choixUtilisateur.Key != ConsoleKey.E && choixUtilisateur.Key != ConsoleKey.F);

                    if (choixUtilisateur.Key == ConsoleKey.A)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Miroir();
                        Process.Start("newimage.bmp");
                    }///Miroir

                    if (choixUtilisateur.Key == ConsoleKey.B)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Agrandir2();
                        Process.Start("newimage.bmp");
                    }///Agrandir

                    if (choixUtilisateur.Key == ConsoleKey.C)
                    {
                        int angle;
                        do
                        {
                            Console.WriteLine("Entrez l'angle souhaité");
                        }while (!int.TryParse(Console.ReadLine(), out angle));
                        MyImage image = new MyImage(choixImage());
                        angle = angle % 360;
                        if (angle == 90 || angle == 180 || angle == 270) ///permet d'eviter la perte de qualité de l'autre methode, et plus rapide.
                        {
                            image.Rotation(angle);
                        }
                        else
                        {
                            image.Rotation3(angle);
                        }
                        Process.Start("newimage.bmp");
                    }///Rotations

                    if (choixUtilisateur.Key == ConsoleKey.D)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Retrecicement(true);
                        Process.Start("newimage.bmp");
                    }///Rétrécissement Horizontal

                    if (choixUtilisateur.Key == ConsoleKey.E)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Retrecicement(false);
                        Process.Start("newimage.bmp");
                    }///Rétrécissement Vertical

                    if (choixUtilisateur.Key == ConsoleKey.F)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Retrecicement(true);
                        image = new MyImage("newimage.bmp");
                        image.Retrecicement(false);
                        Process.Start("newimage.bmp");
                    } ///Rétrécissement Global
                    #endregion
                }     ///Opérations géométriques

                if (choixUtilisateur.Key == ConsoleKey.B)
                {
                    #region Menu Textuel
                    Console.Clear();
                    Console.WriteLine("\n  [Gris et couleurs]" +
                                      "\n" +
                                      "\n- Noir et blanc               (a)" +
                                      "\n- Nuances de gris             (b)" +
                                      "\n- Filtre 4 couleur            (c)");
                    #endregion

                    #region Boutons pour lancer les méthodes
                    do
                    {
                        choixUtilisateur = Console.ReadKey(true);
                    }while (choixUtilisateur.Key != ConsoleKey.A && choixUtilisateur.Key != ConsoleKey.B &&
                            choixUtilisateur.Key != ConsoleKey.C);

                    if (choixUtilisateur.Key == ConsoleKey.A)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.NoirEtBlanc();
                        Process.Start("newimage.bmp");
                    }///Filtre noir et blanc

                    if (choixUtilisateur.Key == ConsoleKey.B)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.NuancesDeGris();
                        Process.Start("newimage.bmp");
                    }///Filtre nuances de gris

                    if (choixUtilisateur.Key == ConsoleKey.C)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Innovation1();
                        Process.Start("newimage.bmp");
                    }
                    #endregion
                }///Gris et couleurs

                if (choixUtilisateur.Key == ConsoleKey.C)
                {
                    #region Menu Textuel
                    Console.Clear();
                    Console.WriteLine("\n  [Matrice de Convolution]" +
                                      "\n" +
                                      "\n- Détection des Contours      (a)" +
                                      "\n- Flou                        (b)" +
                                      "\n- Repoussage                  (c)" +
                                      "\n- Renforcement                (d)");
                    #endregion

                    #region Boutons pour lancer les méthodes
                    do
                    {
                        choixUtilisateur = Console.ReadKey(true);
                    }while (choixUtilisateur.Key != ConsoleKey.A && choixUtilisateur.Key != ConsoleKey.B &&
                            choixUtilisateur.Key != ConsoleKey.C && choixUtilisateur.Key != ConsoleKey.D);

                    if (choixUtilisateur.Key == ConsoleKey.A)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.DetectionContours();
                        Process.Start("newimage.bmp");
                    } ///Détection des contours

                    if (choixUtilisateur.Key == ConsoleKey.B)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Flou();
                        Process.Start("newimage.bmp");
                    }///Flou

                    if (choixUtilisateur.Key == ConsoleKey.C)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Repoussage();
                        Process.Start("newimage.bmp");
                    }///Repoussage

                    if (choixUtilisateur.Key == ConsoleKey.D)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Renforcement();
                        Process.Start("newimage.bmp");
                    } ///Renforcement
                    #endregion
                }     ///Matrice de convolution

                if (choixUtilisateur.Key == ConsoleKey.D)
                {
                    #region Menu Textuel
                    Console.Clear();
                    Console.WriteLine("\n  [Divers]" +
                                      "\n" +
                                      "\n- Histogramme                 (a)" +
                                      "\n- Fractale                    (b)");
                    #endregion

                    #region Boutons pour lancer les méthodes
                    do
                    {
                        choixUtilisateur = Console.ReadKey(true);
                    }while (choixUtilisateur.Key != ConsoleKey.A && choixUtilisateur.Key != ConsoleKey.B);

                    if (choixUtilisateur.Key == ConsoleKey.A)
                    {
                        MyImage image = new MyImage(choixImage());
                        Console.Clear();
                        Console.WriteLine("\nChargement... Veuillez patienter svp.");
                        image.Histogramme2();
                        Process.Start("newimage.bmp");
                    } ///Histogramme

                    if (choixUtilisateur.Key == ConsoleKey.B)
                    {
                        MyImage fractale = new MyImage(400, 400);
                        Console.Clear();
                        Console.WriteLine("\nChargement... Veuillez patienter svp.");
                        fractale.Fractaleee();
                        Process.Start("newimage.bmp");
                    } ///Fractale
                    #endregion
                }     ///Divers

                if (choixUtilisateur.Key == ConsoleKey.E)
                {
                    #region Menu Textuel
                    Console.Clear();
                    Console.WriteLine("\n  [Innovations]" +
                                      "\n" +
                                      "\n- Filtre 4 couleurs           (a)" +
                                      "\n- Images aléatoires           (b)");
                    #endregion

                    #region Boutons pour lancer les méthodes
                    do
                    {
                        choixUtilisateur = Console.ReadKey(true);
                    }while (choixUtilisateur.Key != ConsoleKey.A && choixUtilisateur.Key != ConsoleKey.B /*&&
                                                                                                          * choixUtilisateur.Key != ConsoleKey.C && choixUtilisateur.Key != ConsoleKey.D && choixUtilisateur.Key != ConsoleKey.E*/);

                    if (choixUtilisateur.Key == ConsoleKey.A)
                    {
                        MyImage image = new MyImage(choixImage());
                        image.Innovation1();
                        Process.Start("newimage.bmp");
                    } /// Filtre 4 couleurs / Innovation

                    if (choixUtilisateur.Key == ConsoleKey.B)
                    {
                        MyImage image = new MyImage(500, 500);
                        image.Innovation2();
                        Process.Start("newimage.bmp");
                    }
                    #endregion
                } ///Innovations

                if (choixUtilisateur.Key == ConsoleKey.F) /// Pour fermer la console et mettre fin au programme
                {
                    execute = false;
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Histogramme d'une image. Cette méthode affich 3 histogrammes. Un pour chaque sous pixel donc RGB.
        /// </summary>
        public void Histogramme2()
        {
            MyImage histo    = new MyImage(256 * 3, 250);
            int     nbPixels = this.image.GetLength(0) * this.image.GetLength(1);

            for (int x = 0; x < 256; x++)
            {
                int sommeRouge = 0;
                int sommeVert  = 0;
                int sommeBleu  = 0;
                for (int i = 0; i < this.image.GetLength(0); i++)
                {
                    for (int j = 0; j < this.image.GetLength(1); j++)
                    {
                        // Console.WriteLine(this.image[i, j].Rouge);
                        if (this.image[i, j].Rouge == x)
                        {
                            sommeRouge++;
                        }
                        if (this.image[i, j].Vert == x)
                        {
                            sommeVert++;
                        }
                        if (this.image[i, j].Bleu == x)
                        {
                            sommeBleu++;
                        }
                    }
                }
                sommeRouge = sommeRouge * 20000 / nbPixels;
                sommeVert  = sommeVert * 20000 / nbPixels;
                sommeBleu  = sommeBleu * 20000 / nbPixels;
                if (sommeRouge >= 250)
                {
                    sommeRouge = 249;
                }
                if (sommeVert >= 250)
                {
                    sommeVert = 249;
                }
                if (sommeBleu >= 250)
                {
                    sommeBleu = 249;
                }
                while (sommeVert > 0)
                {
                    histo.image[x, sommeVert] = new Pixel(0, 150, 0);
                    sommeVert--;
                }
                while (sommeRouge > 0)
                {
                    histo.image[x + 256, sommeRouge] = new Pixel(255, 0, 0);
                    sommeRouge--;
                }
                while (sommeBleu > 0)
                {
                    histo.image[x + 512, sommeBleu] = new Pixel(0, 0, 255);
                    sommeBleu--;
                }
            }
            Enregistrement(histo.image);
        }
Пример #4
0
        /// <summary>
        /// Première méthode pour l'histogramme qui ne fonctionne pas.
        /// </summary>
        public void Histogramme()
        {
            MyImage histo = new MyImage(750, 256); //Remplacer comme pour fractale avec nouveau constructeur

            Pixel[,] hist_R = new Pixel[250, 256];
            Pixel[,] hist_V = new Pixel[250, 256];
            Pixel[,] hist_B = new Pixel[250, 256];
            //Le 250 c'est la hauteur du cadre et 256 le nombre de bit

            for (int i = 0; i < 250; i++)
            {
                for (int j = 0; j < 250; j++)
                {
                    hist_R[i, j] = new Pixel(255, 255, 255);
                    hist_V[i, j] = new Pixel(255, 255, 255);
                    hist_B[i, j] = new Pixel(255, 255, 255);
                    //Je créer les 3 cadres blancs qui vont loger les histogrammes
                    //On pourra en faire un qui regroupe les 3 ou les niveaux de gris
                }
            }
            int index = 0;

            //On va refaire 3 fois la même chose pour R,G et B

            //Rouge
            for (int x = 0; x < 256; x++) //ici x va parcours les différents valeurs que peut prendre un bit
            {
                for (int i = 0; i < hauteur; i++)
                {
                    for (int j = 0; j < largeur; j++)
                    {
                        if (x == image[j, i].Rouge)
                        {
                            hist_R[index, x] = new Pixel(255, 0, 0);
                            index++;
                        }
                    }
                }
            }

            for (int i = 0; i < 250; i++)
            {
                for (int j = 0; j < 256; j++)
                {
                    histo.image[i + 500, j].Rouge = hist_R[i, j].Rouge;
                    histo.image[i + 500, j].Vert  = hist_R[i, j].Vert;
                    histo.image[i + 500, j].Bleu  = hist_R[i, j].Bleu;
                }
            }

            //Vert
            for (int x = 0; x < 256; x++) //ici x va parcours les différents valeurs que peut prendre un bit
            {
                for (int i = 0; i < hauteur; i++)
                {
                    for (int j = 0; j < largeur; j++)
                    {
                        if (x == image[j, i].Vert)
                        {
                            hist_V[index, x] = new Pixel(0, 255, 0);
                            index++;
                        }
                    }
                }
            }

            for (int i = 0; i < 250; i++)
            {
                for (int j = 0; j < 256; j++)
                {
                    histo.image[i + 250, j].Rouge = hist_V[i, j].Rouge;
                    histo.image[i + 250, j].Vert  = hist_V[i, j].Vert;
                    histo.image[i + 250, j].Bleu  = hist_V[i, j].Bleu;
                }
            }

            //Bleu
            for (int x = 0; x < 256; x++) //ici x va parcours les différents valeurs que peut prendre un bit
            {
                for (int i = 0; i < hauteur; i++)
                {
                    for (int j = 0; j < largeur; j++)
                    {
                        if (x == image[j, i].Vert)
                        {
                            hist_B[index, x] = new Pixel(0, 0, 255);
                            index++;
                        }
                    }
                }
            }

            for (int i = 0; i < 250; i++)
            {
                for (int j = 0; j < 256; j++)
                {
                    histo.image[i, j].Rouge = hist_B[i, j].Rouge;
                    histo.image[i, j].Vert  = hist_B[i, j].Vert;
                    histo.image[i, j].Bleu  = hist_B[i, j].Bleu;
                }
            }
            Enregistrement(histo.image);
        }