示例#1
0
        public void ConvertisseurBinaireenDec()
        {
            MyImage test = new MyImage("lena.bmp");

            int[] binaire = { 0, 0, 0, 0, 1, 0, 1, 0 };

            int result = test.ConvertisseurBinaireenDec(binaire);

            Assert.AreEqual(10, result);
        }
示例#2
0
        public void ConvertEndiantoInt()
        {
            byte[] tab = { 230, 4, 0, 0 };

            MyImage test = new MyImage("lena.bmp");

            int result = test.Convertir_endian_to_int(tab);

            Assert.AreEqual(1254, result);
        }
示例#3
0
        static void SousMenu2(MyImage a)
        {
            Console.WriteLine("Quel type de filtre voulez vous?");
            Console.WriteLine("1 - Filtre Flou");
            Console.WriteLine("2 - Filtre Renforcement des bords");
            Console.WriteLine("3 - Filtre Detection des contours");
            Console.WriteLine("4 - Filtre Repoussage");
            Console.WriteLine("5 - Filtre Contraste");
            string check = Convert.ToString(Console.ReadLine());
            int    n     = 0;
            bool   verif = int.TryParse(check, out n);

            while ((n != 1 && n != 2 && n != 3 && n != 4 && n != 5) || (verif != true))
            {
                Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3 ou 4 ou 5");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out n);
            }



            switch (n)
            {
            case 1:
                int[,] NoyauFlou = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };

                a.MatriceConvolution(NoyauFlou);
                break;

            case 2:

                int[,] NoyauRenforcementdesbords = { { 0, 0, 0 }, { -1, 1, 0 }, { 0, 0, 0 } };

                a.MatriceConvolution(NoyauRenforcementdesbords);
                break;

            case 3:

                int[,] NoyauDetectiondescontours = { { 0, 1, 0 }, { 1, -4, 1 }, { 0, 1, 0 } };

                a.MatriceConvolution(NoyauDetectiondescontours);
                break;

            case 4:
                int[,] NoyauRepoussage = { { -2, -1, 0 }, { -1, 1, 1 }, { 0, 1, 2 } };

                a.MatriceConvolution(NoyauRepoussage);
                break;

            case 5:
                int[,] NoyauContraste = { { 0, -1, 0 }, { -1, 5, -1 }, { 0, -1, 0 } };
                a.MatriceConvolution(NoyauContraste);
                break;
            }
        }
示例#4
0
        /// <summary>
        /// Permet de coder une image dans une autre
        /// </summary>
        /// <param name="a"> image sélectionner par l'utilisateur </param>
        /// <returns> l'image comprenant l'image cacher dans une image</returns>
        public Pixel[,] ImageCache(MyImage a)
        {
            int[] binaireR = new int[8];
            int[] binaireG = new int[8];
            int[] binaireB = new int[8];

            int[] binaireRC = new int[8];
            int[] binaireGC = new int[8];
            int[] binaireBC = new int[8];

            int[] ConcatenationR = new int[8];
            int[] ConcatenationG = new int[8];
            int[] ConcatenationB = new int[8];



            for (int i = 0; i < a.matRGB.GetLength(0); i++)
            {
                for (int j = 0; j < a.matRGB.GetLength(1); j++)
                {
                    binaireR = ConvertisseurDecenBinaire(matRGB[i, j].red);
                    binaireG = ConvertisseurDecenBinaire(matRGB[i, j].green);
                    binaireB = ConvertisseurDecenBinaire(matRGB[i, j].blue);

                    binaireRC = ConvertisseurDecenBinaire(a.matRGB[i, j].red);
                    binaireGC = ConvertisseurDecenBinaire(a.matRGB[i, j].green);
                    binaireBC = ConvertisseurDecenBinaire(a.matRGB[i, j].blue);

                    for (int x = 0; x < 8; x++)
                    {
                        if (x < 4) // on met les 4 premiers bits de l'image de base en premier bit
                        {
                            ConcatenationR[x] = binaireR[x];
                            ConcatenationG[x] = binaireG[x];
                            ConcatenationB[x] = binaireB[x];
                        }
                        else if (4 <= x) // on met les 4 derniers bits de l'image à cacher coller aux autres 4 premiers bits
                        {
                            ConcatenationR[x] = binaireRC[x - 4];
                            ConcatenationG[x] = binaireGC[x - 4];
                            ConcatenationB[x] = binaireBC[x - 4];
                        }
                    }


                    matRGB[i, j].red   = ConvertisseurBinaireenDec(ConcatenationR); // on convertit le tableau de bits et on rentre les valeurs dans la matrice image
                    matRGB[i, j].green = ConvertisseurBinaireenDec(ConcatenationG);
                    matRGB[i, j].blue  = ConvertisseurBinaireenDec(ConcatenationB);
                }
            }



            return(matRGB);
        }
示例#5
0
        public void ConvertinttoEndian()
        {
            MyImage test = new MyImage("lena.bmp");

            byte[] result = test.Convertir_int_to_endian(1254, 4);
            byte[] tab    = { 230, 4, 0, 0 };
            Assert.AreEqual(tab[0], result[0]);
            Assert.AreEqual(tab[1], result[1]);
            Assert.AreEqual(tab[2], result[2]);
            Assert.AreEqual(tab[3], result[3]);
        }
示例#6
0
        static void MenuImage()
        {
            Bitmap Image = new Bitmap("coco.bmp");

            Console.WriteLine("Choisissez la photo que vous voulez selecitonner avec .bmp a la fin");
            Console.WriteLine("Different choix possible :\n1 - Coco");
            Console.WriteLine("2 - lena");
            Console.WriteLine("3 - lac");
            string check = Convert.ToString(Console.ReadLine());
            int    n     = 0;
            bool   verif = int.TryParse(check, out n);

            while ((n != 1 && n != 2 && n != 3) || (verif != true))
            {
                Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out n);
            }

            switch (n)
            {
            case 1:
                Image = new Bitmap("coco.bmp");
                Image.Save("coco1.bmp");
                break;

            case 2:
                Image = new Bitmap("lena.bmp");
                Image.Save("coco1.bmp");
                break;

            case 3:
                Image = new Bitmap("lac.bmp");
                Image.Save("coco1.bmp");
                break;

            default:

                break;
            }

            MyImage myImage = new MyImage("coco1.bmp");

            Menu1(myImage);


            myImage.From_image_to_file("coco1.bmp");
            Process.Start("coco1.bmp");
            Console.ReadLine();
        }
示例#7
0
        /// <summary>
        /// Permet de faire une fractale de Julia differente possiblité d'image graàce à cette fractale
        /// </summary>
        /// <param name="a">l'image qu'on va venir transformer </param>
        /// <param name="c1">valeur modifiable afin de changer le rendu de l'image</param>
        /// <param name="c2">valeur modifiable afin de changer le rendu de l'image</param>
        public void FractaledeJulia(MyImage a, double c1, double c2)
        {
            a.FractaledeMandelBroot();

            for (int x = 0; x < a.matRGB.GetLength(0); x++)
            {
                for (int y = 0; y < a.matRGB.GetLength(1); y++)
                {
                    double Re = Convert.ToDouble((x - (a.matRGB.GetLength(0) / 2)) / Convert.ToDouble(a.matRGB.GetLength(0) / 4));
                    double Im = Convert.ToDouble((y - (a.matRGB.GetLength(1) / 2)) / Convert.ToDouble(a.matRGB.GetLength(1) / 4));
                    int    i  = 0;

                    Complexe z = new Complexe(Re, Im);


                    while (i < 100)
                    {
                        double RE2 = z.re * z.re;
                        double IM2 = z.im * z.im;

                        double REIM = 2.0 * z.re * z.im;

                        z.re = RE2 - IM2 + c1;
                        z.im = REIM + c2;



                        if (RE2 * RE2 + IM2 * IM2 > 2)
                        {
                            break;
                        }

                        i++;
                    }

                    if (i < 100)
                    {
                        a.matRGB[x, y] = new Pixel(255 * i / 100, 12 * i / 100, 105 * i / 100);
                    }
                    else
                    {
                        a.matRGB[x, y] = new Pixel(150, 125, 255);
                    }
                }
            }
        }
示例#8
0
        public void ConvertisseurDecenBinaire()
        {
            MyImage test = new MyImage("lena.bmp");

            int[] result = test.ConvertisseurDecenBinaire(10);

            int[] binaire = { 0, 0, 0, 0, 1, 0, 1, 0 };

            Assert.AreEqual(binaire[0], result[0]);
            Assert.AreEqual(binaire[1], result[1]);
            Assert.AreEqual(binaire[2], result[2]);
            Assert.AreEqual(binaire[3], result[3]);
            Assert.AreEqual(binaire[4], result[4]);
            Assert.AreEqual(binaire[5], result[5]);
            Assert.AreEqual(binaire[6], result[6]);
            Assert.AreEqual(binaire[7], result[7]);
        }
示例#9
0
        static void MenuQrCode()
        {
            Console.WriteLine("Que vouelz vous faire");
            Console.WriteLine("1 - Faire un QR CODE V1");
            Console.WriteLine("2 - Décoder Un Qr CODE V1");
            Console.WriteLine("3 - Faire un QR CODE V2 (Pas fait)");
            Console.WriteLine("4 - Décoder Un Qr CODE V2 (Pas fait)");
            string check = Convert.ToString(Console.ReadLine());
            int    n     = 0;
            bool   verif = int.TryParse(check, out n);

            while ((n != 1 && n != 2) || (verif != true))
            {
                Console.WriteLine("Veuillez saisir soit 1 ou 2");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out n);
            }
            switch (n)
            {
            case 1:
                Console.WriteLine("ecrivez le mot à encoder max 19 caractère (V1)");
                string mot = Console.ReadLine();
                mot = mot.ToUpper();
                QRcode Qr    = new QRcode(mot);
                Bitmap Image = new Bitmap("coco.bmp");
                Image.Save("coco1.bmp");
                MyImage QRIm = new MyImage("coco1.bmp");
                QRIm = Qr.EcritureQRCodeMatrice(QRIm);
                QRIm.From_image_to_file("coco1.bmp");
                Process.Start("coco1.bmp");
                break;

            case 2:
                Console.WriteLine("ecrivez le mot à encoder max 19 caractère (V1) qui sera décoder par la suite");
                mot = Console.ReadLine();
                mot = mot.ToUpper();
                Qr  = new QRcode(mot);
                Console.WriteLine(Qr.DecodageQRV1(Qr));
                Console.ReadKey();
                break;

            default:
                break;
            }
        }
示例#10
0
        static void Menu1(MyImage a)
        {
            Console.Write("Que Voulez vous faire ?");
            Console.WriteLine("\n1 - Traitement d'Image");
            Console.WriteLine("2 - Matrice Convolution");
            Console.WriteLine("3 - Fractale, Histogramme et coder et decoder une image dans une autre");
            string check = Convert.ToString(Console.ReadLine());
            int    n     = 0;
            bool   verif = int.TryParse(check, out n);

            while ((n != 1 && n != 2 && n != 3) || (verif != true))
            {
                Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out n);
            }


            switch (n)
            {
            case 1:
                SousMenu1(a);
                break;

            case 2:
                SousMenu2(a);
                break;

            case 3:
                SousMenu3(a);
                break;

            default:
                break;
            }
        }
示例#11
0
        static void SousMenu3(MyImage a)
        {
            Console.WriteLine("Menu Fractale");
            Console.WriteLine("1 - Fractale de MandelBroot");
            Console.WriteLine("2 - Fractale de Julia");
            Console.WriteLine("3 - Histogramme");
            Console.WriteLine("4 - Coder une image dans une autre");
            Console.WriteLine("5 - Coder puis decoder une image (qu'on vient d'encoder dans une autre)");
            string check = Convert.ToString(Console.ReadLine());
            int    n     = 0;
            bool   verif = int.TryParse(check, out n);

            while ((n != 1 && n != 2 && n != 3 && n != 4 && n != 5) || (verif != true))
            {
                Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out n);
            }



            switch (n)
            {
            case 1:
                a.FractaledeMandelBroot();
                break;

            case 2:
                Console.WriteLine("3 Fractale de Julia differente possible:\n 1- etoile, \n 2- fleche \n 3- éclair ");

                check = Convert.ToString(Console.ReadLine());
                n     = 0;
                verif = int.TryParse(check, out n);

                while ((n != 1 && n != 2 && n != 3) || (verif != true))
                {
                    Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3");
                    check = Convert.ToString(Console.ReadLine());
                    verif = int.TryParse(check, out n);
                }
                switch (n)
                {
                case 1:

                    a.FractaledeJulia(a, -0.70176, -0.3842);
                    break;

                case 2:
                    a.FractaledeJulia(a, -0.8, 0.156);
                    break;

                case 3:
                    a.FractaledeJulia(a, 0, 0.8);
                    break;

                default:
                    break;
                }

                break;

            case 3:
                a.Histogramme();
                break;

            case 4:
                Console.WriteLine("choisissez la photo a cacher dedans avec .bmp : \n 1 - lena.bmp \n 2 - coco.bmp \n 3 - lac.bmp");
                check = Convert.ToString(Console.ReadLine());
                n     = 0;
                verif = int.TryParse(check, out n);

                while ((n != 1 && n != 2 && n != 3) || (verif != true))
                {
                    Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3");
                    check = Convert.ToString(Console.ReadLine());
                    verif = int.TryParse(check, out n);
                }
                switch (n)
                {
                case 1:
                    Bitmap Im = new Bitmap("lena.bmp");
                    Im.Save("Imageacacher.bmp");
                    MyImage Im1 = new MyImage("Imageacacher.bmp");
                    a.ImageCache(Im1);
                    break;

                case 2:
                    Im = new Bitmap("coco.bmp");
                    Im.Save("Imageacacher.bmp");
                    Im1 = new MyImage("Imageacacher.bmp");
                    a.ImageCache(Im1);
                    break;

                case 3:
                    Im = new Bitmap("lac.bmp");
                    Im.Save("Imageacacher.bmp");
                    Im1 = new MyImage("Imageacacher.bmp");
                    a.ImageCache(Im1);
                    break;

                default:
                    break;
                }



                break;

            case 5:

                Console.WriteLine("choisissez la photo a cacher dedans avec .bmp puis qui sera redecoder dans la foulée : \n 1 - lena.bmp \n 2 - coco.bmp \n 3 - lac.bmp");
                check = Convert.ToString(Console.ReadLine());
                n     = 0;
                verif = int.TryParse(check, out n);

                while ((n != 1 && n != 2 && n != 3) || (verif != true))
                {
                    Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3");
                    check = Convert.ToString(Console.ReadLine());
                    verif = int.TryParse(check, out n);
                }
                switch (n)
                {
                case 1:
                    Bitmap Im = new Bitmap("lena.bmp");
                    Im.Save("Imageacacher.bmp");
                    MyImage Im1 = new MyImage("Imageacacher.bmp");
                    a.ImageCoderetDecoder(Im1);
                    break;

                case 2:
                    Im = new Bitmap("coco.bmp");
                    Im.Save("Imageacacher.bmp");
                    Im1 = new MyImage("Imageacacher.bmp");
                    a.ImageCoderetDecoder(Im1);
                    break;

                case 3:
                    Im = new Bitmap("lac.bmp");
                    Im.Save("Imageacacher.bmp");
                    Im1 = new MyImage("Imageacacher.bmp");
                    a.ImageCoderetDecoder(Im1);
                    break;

                default:
                    break;
                }


                break;
            }
        }
示例#12
0
        static void SousMenu1(MyImage a)
        {
            Console.Write("Que Voulez vous faire sur l'image");
            Console.WriteLine("\n1 - Noir et Blanc");
            Console.WriteLine("2 - Nuance de gris");
            Console.WriteLine("3 - Miroir par horizontal");
            Console.WriteLine("4 - Miroir par Vertical");
            Console.WriteLine("5 - Rotation Image");
            Console.WriteLine("6 - Agrandir Image");
            Console.WriteLine("7 - Retrecir Image");
            string check = Convert.ToString(Console.ReadLine());
            int    n     = 0;
            bool   verif = int.TryParse(check, out n);

            while ((n != 1 && n != 2 && n != 3 && n != 4 && n != 5 && n != 6 && n != 7) || (verif != true))
            {
                Console.WriteLine("Veuillez saisir soit 1 ou 2 ou 3 ou 4 ou 5 ou 6 ou 7");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out n);
            }
            switch (n)
            {
            case 1:
                a.NoirBlanc();

                break;

            case 2:
                a.NuanceGris();

                break;

            case 3:
                a.MiroirH();

                break;

            case 4:
                a.MiroirV();

                break;

            case 5:
                int angle = 0;
                Console.WriteLine("entrer un angle");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out angle);

                while (verif != true)
                {
                    Console.WriteLine("Veuillez saisir un angle pas un caractère");
                    check = Convert.ToString(Console.ReadLine());
                    verif = int.TryParse(check, out angle);
                }


                a.matRGB = a.Rotation(angle);

                break;

            case 6:
                int coeff = 0;
                Console.WriteLine("de combien voulez vous agrandir l'image c'est à dire de x1 x2 x3 (max 6)");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out coeff);

                while ((coeff != 1 && coeff != 2 && coeff != 3 && coeff != 4 && coeff != 5 && coeff != 6) || (verif != true))
                {
                    Console.WriteLine("Veuillez saisir un chiffre entre 1 et 6 inclus et pas un caractère");
                    check = Convert.ToString(Console.ReadLine());
                    verif = int.TryParse(check, out coeff);
                }

                a.matRGB = a.Agrandir(coeff);

                break;

            case 7:
                int coeffR = 0;
                Console.WriteLine("donner un multiplicateur càd de combien voulez vous reduire l'image x1 x2 x3 ...");
                check = Convert.ToString(Console.ReadLine());
                verif = int.TryParse(check, out coeffR);

                while (verif != true)
                {
                    Console.WriteLine("Veuillez saisir un chiffre pas un caractère");
                    check = Convert.ToString(Console.ReadLine());
                    verif = int.TryParse(check, out coeffR);
                }

                a.matRGB = a.retrecir(coeffR);

                break;

            default:
                break;
            }
        }
示例#13
0
        /// <summary>
        /// Permet de coder une image dans une image puis de la décoder dans le second temps
        /// </summary>
        /// <param name="a"> l'image selectionner par l'utilisateur</param>
        public void ImageCoderetDecoder(MyImage a)
        {
            Pixel[,] matcache = ImageCache(a);

            Pixel[,] mat = new Pixel[a.matRGB.GetLength(0), a.matRGB.GetLength(1)];
            int[] binaireR = new int[8];
            int[] binaireG = new int[8];
            int[] binaireB = new int[8];


            int[] ConcatenationR = new int[8];
            int[] ConcatenationG = new int[8];
            int[] ConcatenationB = new int[8];

            for (int i = 0; i < mat.GetLength(0); i++)
            {
                for (int j = 0; j < mat.GetLength(1); j++)
                {
                    mat[i, j] = new Pixel(255, 255, 255);
                }
            }

            for (int i = 0; i < a.matRGB.GetLength(0); i++)
            {
                for (int j = 0; j < a.matRGB.GetLength(1); j++)
                {
                    binaireR = ConvertisseurDecenBinaire(matcache[i, j].red);
                    binaireG = ConvertisseurDecenBinaire(matcache[i, j].green);
                    binaireB = ConvertisseurDecenBinaire(matcache[i, j].blue);


                    for (int x = 0; x < 8; x++) // on vient chercher le sbits cachés de 4 à 8 qu'on met en 0 à 4
                    {
                        if (x < 4)
                        {
                            ConcatenationR[x] = binaireR[x + 4];
                            ConcatenationG[x] = binaireG[x + 4];
                            ConcatenationB[x] = binaireB[x + 4];
                        }
                        else if (4 <= x)
                        {
                            ConcatenationR[x] = 0; // on remplit le reste à 0 puisqu'on à plus le reste de 4 à 8
                            ConcatenationG[x] = 0;
                            ConcatenationB[x] = 0;
                        }
                    }
                    mat[i, j].red   = ConvertisseurBinaireenDec(ConcatenationR);
                    mat[i, j].green = ConvertisseurBinaireenDec(ConcatenationG);
                    mat[i, j].blue  = ConvertisseurBinaireenDec(ConcatenationB);
                }
            }

            for (int i = 0; i < matRGB.GetLength(0); i++) // on met l'image en blanc
            {
                for (int j = 0; j < matRGB.GetLength(1); j++)
                {
                    matRGB[i, j] = new Pixel(255, 255, 255);
                }
            }
            for (int i = 0; i < mat.GetLength(0); i++) // on remplit avec ce qu'on à récuperé juste avant
            {
                for (int j = 0; j < mat.GetLength(1); j++)
                {
                    matRGB[i, j] = mat[i, j];
                }
            }
        }