/// <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"); }
/// <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"); }