Пример #1
0
        /// <summary>
        /// Hide a picture
        /// </summary>
        /// <param name="toHide"></param>
        public void Hide(MyImage toHide)
        {
            byte tmp;

            for (int i = 0; i < this.height; i++)
            {
                for (int j = 0; j < this.width; j++)
                {
                    tmp = (byte)((toHide.ImageMatrix[i, j].R & 0b_1111_0000) >> 4);
                    this.imageMatrix[i, j].R = (byte)((this.imageMatrix[i, j].R & 0b_1111_0000) | tmp);
                    tmp = (byte)((toHide.ImageMatrix[i, j].G & 0b_1111_0000) >> 4);
                    this.imageMatrix[i, j].G = (byte)((this.imageMatrix[i, j].G & 0b_1111_0000) | tmp);
                    tmp = (byte)((toHide.ImageMatrix[i, j].B & 0b_1111_0000) >> 4);
                    this.imageMatrix[i, j].B = (byte)((this.imageMatrix[i, j].B & 0b_1111_0000) | tmp);
                }
            }
        }
Пример #2
0
        public MyImage Fractale(int choixFractale, int choixCouleur)
        {
            MyImage fractale = new MyImage("tigre.bmp");
            //SETTINGS pour le cadrage de l'image
            double x1;
            double x2;
            double y1;
            double y2;

            if (choixFractale == 1)
            {
                x1 = -2.1;
                x2 = 0.6;
                y1 = -1.2;
                y2 = 1.2;
            }
            else
            {
                x1 = -1;
                x2 = 1;
                y1 = -1.2;
                y2 = 1.2;
            }
            int zoom = 1000; //zoom idéal pour l'affichage de l'image

            int iterationMax = 100;

            int image_x = Convert.ToInt32((x2 - x1) * zoom);
            int image_y = Convert.ToInt32((y2 - y1) * zoom);

            while (image_y % 4 != 0 || image_x % 4 != 0)
            {
                if (image_x % 4 != 0)
                {
                    image_x++;
                }
                if (image_y % 4 != 0)
                {
                    image_y++;
                }
            }
            fractale.height = image_x;
            fractale.width  = image_y;
            fractale.size   = fractale.height * fractale.width * 3 + 54;

            fractale.imageMatrix = new Pixel[image_x, image_y];
            Pixel noir  = new Pixel(0, 0, 0);
            Pixel blanc = new Pixel(255, 255, 255);

            for (int x = 0; x < image_x; x++)
            {
                for (int y = 0; y < image_y; y++)
                {
                    double val_x = x;
                    double val_y = y;
                    byte   i     = 0;

                    if (choixFractale == 1)
                    {
                        Complex c = new Complex(val_x / zoom + x1, val_y / zoom + y1);
                        Complex z = new Complex(0, 0);
                        /*-0.70176; -0.3842; */


                        do
                        {
                            i = (byte)(i + 1);
                            z.Square();
                            z.Add(c);
                        } while (z.Test() < 4 && i < iterationMax);
                    }
                    else if (choixFractale == 2) //JULIA SET 1
                    {
                        Complex c = new Complex(val_x / zoom + x1, val_y / zoom + y1);
                        Complex z = new Complex(-0.4, 0.6);
                        do
                        {
                            i = (byte)(i + 1);
                            c.Square();
                            c.Add(z);
                        } while (c.Test() < 4 && i < iterationMax);
                    }
                    else  //JULIA SET 2
                    {
                        Complex c = new Complex(val_x / zoom + x1, val_y / zoom + y1);
                        Complex z = new Complex(-0.70176, -0.3842);
                        do
                        {
                            i = (byte)(i + 1);
                            c.Square();
                            c.Add(z);
                        } while (c.Test() < 4 && i < iterationMax);
                    }



                    if (i == iterationMax)
                    {
                        fractale.imageMatrix[x, y] = noir; //new Pixel(255,255,255) pour du blanc;
                    }
                    else
                    {
                        //set par défaut
                        Pixel couleur = new Pixel(Convert.ToByte((Math.Sqrt(i * 655))), Convert.ToByte((Math.Sqrt(i * 655))), Convert.ToByte((Math.Sqrt(i * 655))));

                        if (choixCouleur == 2) //blue set
                        {
                            couleur = new Pixel(Convert.ToByte((Math.Sqrt(i * 655))), 0, 0);
                        }
                        if (choixCouleur == 3) //green set
                        {
                            couleur = new Pixel(0, Convert.ToByte((Math.Sqrt(i * 655))), 0);
                        }
                        if (choixCouleur == 4) //red set
                        {
                            couleur = new Pixel(0, 0, Convert.ToByte((Math.Sqrt(i * 655))));
                        }
                        if (choixCouleur == 5)
                        {
                            if (i <= 20) //blue set
                            {
                                couleur = new Pixel(Convert.ToByte((Math.Sqrt(i * 655))), 0, 0);
                            }
                            else if (20 <= i && i <= 50) //green set
                            {
                                couleur = new Pixel(0, Convert.ToByte((Math.Sqrt(i * 655))), 0);
                            }
                            else  //red set
                            {
                                couleur = new Pixel(0, 0, Convert.ToByte((Math.Sqrt(i * 655))));
                            }
                        }

                        fractale.imageMatrix[x, y] = couleur;
                    }
                }
            }
            return(fractale);
        }
Пример #3
0
        static void Main(string[] args)
        {
            string nameImage = "coco.bmp";

            do
            {
                try
                {
                    Console.Clear();
                    Menu();


                    MyImage image = new MyImage(nameImage);
                    switch (Int32.Parse(Console.ReadLine()))
                    {
                    case 0:
                        /*Console.WriteLine("L'image par défaut est coco.bmp");
                         * Console.WriteLine("Pour changer en Lena.bmp saisir 1 et pour changer en tigre.bmp tapez 2");
                         * Console.WriteLine("Saisir un autre nombre pour rester sur coco.bmp");
                         * int rep = Int32.Parse(Console.ReadLine());
                         * nameImage = "coco.bmp";
                         *
                         * if (rep == 1)
                         * {
                         *  nameImage = "lena.bmp";
                         * }
                         * else if (rep == 2)
                         * {
                         *  nameImage = "tigre.bmp";
                         * }
                         */
                        QRCode c = new QRCode("HELLO WORLD");

                        break;

                    case 1:     // Infos sur l'image
                        Console.Clear();
                        Console.WriteLine(image.toString());

                        /*image.Histo();
                         * image.From_Image_To_File("Histo");
                         * LancementImage("Histo.bmp");/*
                         * MyImage toHide = new MyImage("lena.bmp");
                         * image.Hide(toHide);
                         * image.From_Image_To_File("Hide");
                         * LancementImage("Hide.bmp");
                         * image.Show();
                         * image.From_Image_To_File("Show");
                         * LancementImage("Show.bmp");*/
                        break;

                    case 2:     // Conversion des données en fichier
                        Console.Clear();
                        Console.WriteLine("Saisissez le nom de votre fichier");
                        image.From_Image_To_File(Console.ReadLine());
                        break;

                    case 3:     // Affichage du fichier sous forme d'un tableau de bits
                        Console.Clear();
                        Console.WriteLine("\n HEADER \n");
                        for (int i = 0; i < 14; i++)
                        {
                            Console.Write(image.DataImage[i] + " ");
                        }
                        Console.WriteLine("\n HEADER INFO \n");
                        for (int i = 14; i < 54; i++)
                        {
                            Console.Write(image.DataImage[i] + " ");
                        }
                        Console.WriteLine("\n IMAGE \n");
                        for (int i = 54; i < image.DataImage.Length; i = i + 60)
                        {
                            for (int j = i; j < i + 60; j++)
                            {
                                Console.Write(image.DataImage[j] + " ");
                            }
                            Console.WriteLine();
                        }
                        break;

                    case 4:     // Affichage de la matrice de l'image
                        Console.Clear();
                        int count = 0;
                        foreach (Pixel rgb in image.ImageMatrix)
                        {
                            count++;
                            Console.Write(rgb.ToString() + " ");
                            if (count == image.Width)
                            {
                                Console.Write("\n");
                                count = 0;
                            }
                        }
                        break;

                    case 5:     //Gray scale
                        Console.Clear();
                        MyImage imageEnGris = new MyImage(nameImage);
                        imageEnGris.GrayScaleImage();
                        imageEnGris.From_Image_To_File("Gris");
                        LancementImage("Gris.bmp");
                        break;

                    case 6:     //Black and white
                        Console.Clear();
                        MyImage futurNoirEtBlanc = new MyImage(nameImage);
                        futurNoirEtBlanc.Black_And_White();
                        futurNoirEtBlanc.From_Image_To_File("NoirEtBlanc");
                        LancementImage("NoirEtBlanc.bmp");
                        break;

                    case 7:
                        //Agrandir une image
                        Console.Clear();
                        MyImage imageAAgrandir = new MyImage(nameImage);
                        Console.WriteLine("Sélectionner le coefficient d'aggrandissement de l'image souhaité (entier naturel)");
                        int a;
                        try { a = Convert.ToInt32(Console.ReadLine()); }
                        catch { a = 1; }
                        imageAAgrandir.Enlarge(a);
                        imageAAgrandir.From_Image_To_File("Agrandissement");
                        LancementImage("Agrandissement.bmp");
                        break;

                    case 8:
                        //Rétrécir une image
                        Console.Clear();
                        MyImage imageARetrecir = new MyImage(nameImage);
                        Console.WriteLine("Sélectionner le coefficient de rétrécissement de l'image souhaité (max 10)");
                        int b;
                        try { b = Convert.ToInt32(Console.ReadLine()); }
                        catch { b = 1; }
                        if (b <= 10)
                        {
                            imageARetrecir.ReduceSelect(b);
                            imageARetrecir.From_Image_To_File("Reduction");
                            LancementImage("Reduction.bmp");
                        }
                        break;

                    case 9:
                        //Rotation image
                        Console.Clear();
                        MyImage imageRotation = new MyImage(nameImage);
                        Console.WriteLine("Veuillez saisir l'angle de rotation souhaité en degrés");
                        int angle = Convert.ToInt32(Console.ReadLine());
                        if (angle < 361 && angle > 0)
                        {
                            imageRotation.Rotate(angle);
                            imageRotation.From_Image_To_File("Rotation");
                            LancementImage("Rotation.bmp");
                        }
                        break;

                    case 10:
                        Console.Clear();
                        Console.WriteLine("Veuillez saisir le numéro correspondant au type de miroir appliqué : \n"
                                          + "1 : Mirroir Droite-Gauche\n"
                                          + "2 : Mirroir Gauche-Droite\n"
                                          + "3 : Mirroir Haut-Bas\n"
                                          + "4 : Mirroir Bas-Haut\n");

                        int     nb          = Convert.ToInt32(Console.ReadLine());
                        MyImage imageMiroir = new MyImage(nameImage);
                        switch (nb)
                        {
                        case 1:
                            imageMiroir.VerticalMirror_RL();
                            imageMiroir.From_Image_To_File("Mirroir_R_L_");
                            LancementImage("Mirroir_R_L_.bmp");
                            break;

                        case 2:
                            imageMiroir.VerticalMirror_LR();
                            imageMiroir.From_Image_To_File("Mirroir_L_R_");
                            LancementImage("Mirroir_L_R_.bmp");
                            break;

                        case 3:
                            imageMiroir.HorizontalMirror_UD();
                            imageMiroir.From_Image_To_File("Mirroir_U_D_");
                            LancementImage("Mirroir_U_D_.bmp");
                            break;

                        case 4:
                            imageMiroir.HorizontalMirror_DU();
                            imageMiroir.From_Image_To_File("Mirroir_D_U_");
                            LancementImage("Mirroir_D_U_.bmp");
                            break;

                        default:
                            Console.WriteLine("Il n'y a pas d'options correspondant à ce nombre");
                            break;
                        }
                        break;


                    case 11:
                        // Filtres
                        MenuFiltres();
                        int answer = Int32.Parse(Console.ReadLine());
                        if (answer >= 1 && answer < 7)
                        {
                            Console.Clear();
                            MyImage filtre = new MyImage(nameImage);
                            filtre.Filters(answer);
                            filtre.From_Image_To_File("Filtre");
                            LancementImage("Filtre.bmp");
                        }
                        else
                        {
                            Console.WriteLine("Saisissez un nombre entre 1 et 6");
                        }
                        break;

                    case 12:     //TEST AUTRE FRACTALE
                        Console.Clear();
                        Console.WriteLine("Veuillez saisir le numéro correspondant au type de fractale voulue : \n"
                                          + "1 : fractale de Mandelbrot \n"
                                          + "2 : fractale de Julia V1\n"
                                          + "3 : fractale de Julia V2\n\n"
                                          + "Recommandation : fractale de Julia V1 en mix de couleurs; fractale de Julia V2 en noir et blanc\n");
                        int choix = 1;
                        try
                        {
                            choix = Convert.ToInt32(Console.ReadLine());
                        }
                        catch { Console.WriteLine("votre saisie n'étant pas valide, la fractale de Mandelbrot sera affichée par défaut"); }
                        if (choix != 1 && choix != 2 && choix != 3)
                        {
                            choix = 1;
                            Console.WriteLine("votre saisie n'étant pas valide, la fractale de Mandelbrot sera affichée par défaut");
                        }

                        Console.WriteLine("Veuillez saisir le numéro correspondant à la couleur associée à votre fractale : \n"
                                          + "1 : noir et blanc \n"
                                          + "2 : bleu\n"
                                          + "3 : vert\n"
                                          + "4 : rouge\n"
                                          + "5 : mix des couleurs\n");

                        int choixCouleur = 1;
                        try
                        {
                            choixCouleur = Convert.ToInt32(Console.ReadLine());
                        }
                        catch { Console.WriteLine("votre saisie n'étant pas valide, la couleur noir-blanc sera attribué par défaut"); }
                        if (choixCouleur != 1 && choixCouleur != 2 && choixCouleur != 3 && choixCouleur != 4 && choixCouleur != 5)
                        {
                            choixCouleur = 1;
                            Console.WriteLine("votre saisie n'étant pas valide, la couleur noir-blanc sera attribué par défaut");
                        }

                        MyImage fractale3 = new MyImage("tigre.bmp");
                        MyImage FRACTALE  = fractale3.Fractale(choix, choixCouleur);
                        FRACTALE.From_Image_To_File("FractaleTESTTTT");
                        LancementImage("FractaleTESTTTT.bmp");

                        break;

                    case 13:

                        Console.Clear();
                        Console.WriteLine("Voici l'histogramme de " + nameImage);
                        image.Histo();
                        image.From_Image_To_File("Histo");
                        LancementImage("Histo.bmp");
                        break;


                    case 14:

                        MyImage toHide = new MyImage("lena.bmp");
                        image.Hide(toHide);
                        Console.WriteLine("l'image" + nameImage + "a été caché dans cette image");
                        image.From_Image_To_File("Hide");
                        LancementImage("Hide.bmp");
                        image.Show();
                        Console.WriteLine("à partir de cette image, on va retrouvé " + nameImage);
                        image.From_Image_To_File("Show");
                        LancementImage("Show.bmp");


                        break;



                    default:
                        Console.WriteLine("Il n'y a pas d'options correspondant à ce nombre");
                        break;
                    }
                    Console.ReadKey();
                    Console.Clear();
                    Console.WriteLine("Tapez escape pour sortir ou sur une autre touche pour retourner au menu principal");
                }

                // IO Exception lors de la saisie
                catch (Exception e)
                {
                    Console.Clear();
                    Console.WriteLine(" Erreur de saisie, veuillez saisir ce qui vous est demandé ");
                    Console.WriteLine("Détails de l'exception : \n" + e);
                }
            } while (Console.ReadKey().Key != ConsoleKey.Escape);
        }