예제 #1
0
        /// <summary>
        /// On parcourt la totalité de la matrice dans laquelle on va cacher l'autre image
        /// quand les indexs sont plus grands que les dimensions de l'image caché on les valeurs de R,G et B de l'image caché = 0
        /// à chaque on relève les valeurs R,G et B pour les 2 images que l'on converti en string puis en tableau de int
        /// on prend les 4 premiers bit de R,G et B pour le pixel étudié de chaque image
        /// on créé une nouvelle valeur de R,G et B pour notre stéganograophie que l'on repasse en valeur entre 0 et 255
        /// les 4 premiers bit de la stéganographie sont les 4 premiers bit du pixel de l'image dans laquelle on cache
        /// les 4 derniers bit de la stéganographie sont les 4 premiers bit du pixel de l'image caché
        /// </summary>
        /// <param name="imagecaché"></param> correspond à l'image que l'on souhaite caché
        public void Stéganographie(Pixel[,] imagecaché)

        {
            int[] newValeurR = new int[8];

            int[] newValeurG = new int[8];

            int[] newValeurB = new int[8];

            Pixel[,] picture = new Pixel[image.GetLength(0), image.GetLength(1)];

            for (int k = 0; k < image.GetLength(0); k++)

            {
                for (int l = 0; l < image.GetLength(1); l++)
                {
                    string Rbinaire2, Gbinaire2, Bbinaire2;
                    string Rbinaire = Convert.ToString(image[k, l].R, 2).PadLeft(8, '0');

                    string Gbinaire = Convert.ToString(image[k, l].G, 2).PadLeft(8, '0');

                    string Bbinaire = Convert.ToString(image[k, l].B, 2).PadLeft(8, '0');
                    if (k < imagecaché.GetLength(0) && l < imagecaché.GetLength(1))
                    {
                        Rbinaire2 = Convert.ToString(imagecaché[k, l].R, 2).PadLeft(8, '0');

                        Gbinaire2 = Convert.ToString(imagecaché[k, l].G, 2).PadLeft(8, '0');

                        Bbinaire2 = Convert.ToString(imagecaché[k, l].B, 2).PadLeft(8, '0');
                    }
                    else
                    {
                        Rbinaire2 = "00000000";

                        Gbinaire2 = "00000000";

                        Bbinaire2 = "00000000";
                    }

                    for (int i = 0; i < 4; i++)

                    {
                        newValeurR[i] = Convert.ToInt32(Rbinaire[i]);

                        newValeurG[i] = Convert.ToInt32(Gbinaire[i]);

                        newValeurB[i] = Convert.ToInt32(Bbinaire[i]);
                    }

                    for (int i = 0; i < 4; i++)

                    {
                        newValeurR[i + 4] = Convert.ToInt32(Rbinaire2[i]);

                        newValeurG[i + 4] = Convert.ToInt32(Gbinaire2[i]);

                        newValeurB[i + 4] = Convert.ToInt32(Bbinaire2[i]);
                    }

                    int valeurR = 0;

                    int valeurG = 0;

                    int valeurB = 0;

                    double a = 7;

                    for (int i = 0; i < 8; i++)
                    {
                        valeurR = Convert.ToInt32(valeurR + newValeurR[i] * Math.Pow(2, a));

                        valeurG = Convert.ToInt32(valeurG + newValeurG[i] * Math.Pow(2, a));

                        valeurB = Convert.ToInt32(valeurB + newValeurB[i] * Math.Pow(2, a));

                        a--;
                    }
                    picture[k, l] = new Pixel(valeurR, valeurG, valeurB);
                }
            }

            ChangerProprietees(picture);

            FromImage_ToFIle(@"sortie.bmp");
        }
예제 #2
0
        /// <summary>
        /// On récupere les valeurs de RGB de l'image stéganographié
        /// ON parcourt tte l'image on prend à chaque fois les 4 derniers bit de RGB pour chaque pixel
        /// ainsi les valeurs de RGB des pixels l'image caché correpondent aux 4 derniers bit RGB des pixels de l'image stéganographié suivi de 4 zéros
        /// On converti ce résultat en valeur entre 0 et 255 et on obtient l'image
        /// </summary>
        public void Décoder_Stéganographie2()

        {
            int[] newValeurR2 = new int[8];

            int[] newValeurG2 = new int[8];

            int[] newValeurB2 = new int[8];

            Pixel[,] picture2 = new Pixel[image.GetLength(0), image.GetLength(1)];

            for (int k = 0; k < image.GetLength(0); k++)

            {
                for (int l = 0; l < image.GetLength(1); l++)

                {
                    string Rbinaire = Convert.ToString(image[k, l].R, 2).PadLeft(8, '0');

                    string Gbinaire = Convert.ToString(image[k, l].G, 2).PadLeft(8, '0');

                    string Bbinaire = Convert.ToString(image[k, l].B, 2).PadLeft(8, '0');

                    for (int i = 0; i < 4; i++)

                    {
                        newValeurR2[i] = Convert.ToInt32(Rbinaire[i + 4]);

                        newValeurG2[i] = Convert.ToInt32(Gbinaire[i + 4]);

                        newValeurB2[i] = Convert.ToInt32(Bbinaire[i + 4]);
                    }

                    for (int i = 4; i < 8; i++)

                    {
                        newValeurR2[i] = 0;

                        newValeurG2[i] = 0;

                        newValeurB2[i] = 0;
                    }

                    int valeurR2 = 0;

                    int valeurG2 = 0;

                    int valeurB2 = 0;

                    double a = 7;

                    for (int i = 0; i < 8; i++)

                    {
                        valeurR2 = Convert.ToInt32(valeurR2 + newValeurR2[i] * Math.Pow(2, a));

                        valeurG2 = Convert.ToInt32(valeurG2 + newValeurG2[i] * Math.Pow(2, a));

                        valeurB2 = Convert.ToInt32(valeurB2 + newValeurB2[i] * Math.Pow(2, a));

                        a--;
                    }

                    picture2[k, l] = new Pixel(valeurR2, valeurG2, valeurB2);
                }
            }

            taille -= image.GetLength(0) * image.GetLength(1);

            largeur = picture2.GetLength(1);

            hauteur = picture2.GetLength(0);

            taille += hauteur * largeur * 9;

            image = picture2;

            FromImage_ToFIle(@"sortie.bmp");
        }