static void Main(string[] args) { bool fin = true; while (fin) { Console.WriteLine("\n\n Menu" + "\n\n 1/ Charger un fichier" + "\n 2/ Utiliser coco" + "\n 3/ Créer un Fractale" + "\n 4/ Générer un QrCode" + "\n 5/ Exit"); Console.Write("\n Entrez le programme souhaité > "); int choix = Convert.ToInt32(Console.ReadLine()); string chemin = ""; if (choix == 1) { Console.Write("\n\n Entrez le chemin du fichier souhaité > "); chemin = Console.ReadLine(); } else if (choix == 2) { chemin = "coco.bmp"; } switch (choix) { case 1: case 2: bool fin2 = true; MyImage image = new MyImage(chemin); while (fin2) { Console.WriteLine("\n\n Menu Image" + "\n\n 1/ Sauvegarder le fichier fichier" + "\n 2/ Convertir en Noir et blanc" + "\n 3/ Agrandire l'image" + "\n 4/ Réduire l'image" + "\n 5/ Effet Miroir" + "\n 6/ Rotation" + "\n 7/ Flouter" + "\n 8/ Detection des bords" + "\n 9/ Renforcement des bords" + "\n 10/ Repoussage des bords" + "\n 11/ Créer l'histogramme" + "\n 12/ Cacher une image dans une image" + "\n 13/ Décoder une image" + "\n 14/ Innovation" + "\n 15/ Exit"); Console.Write("\n Entrez le programme souhaité > "); int choix2 = Convert.ToInt32(Console.ReadLine()); switch (choix2) { case 1: Console.Write("\n\n Entrez le chemin souhaitée pour sauvegarder la fractale (n'oubliez pas le '.bmp') > "); chemin = Console.ReadLine(); image.From_Image_To_File(chemin); Console.WriteLine("\n\n fichier enregistré"); break; case 2: image.ConvertToGris(); Console.WriteLine("\n\n image convertie en nuance de gris"); break; case 3: Console.Write("\n\n Entrez le facteur d'agrandissement > "); int fact = Convert.ToInt32(Console.ReadLine()); image.Agrandissement(fact); Console.WriteLine("\n\n Image Agrandie"); break; case 4: Console.Write("\n\n Entrez le facteur de réduction > "); fact = Convert.ToInt32(Console.ReadLine()); image.Agrandissement(fact); Console.WriteLine("\n\n Image Agrandie"); break; case 5: Console.Write("\n\n Entrez H pour un miroir horizontal et V pour un miroir Vertical > "); char caract = char.ToUpper(Convert.ToChar(Console.ReadLine())); image.Miroir(caract); Console.WriteLine("\n\n Effet Appliqué"); break; case 6: Console.Write("\n\n Entrez le'angle de rotation > "); fact = Convert.ToInt32(Console.ReadLine()); image.Rotation(fact); Console.WriteLine("\n\n Rotation effectuée"); break; case 7: image.Flou(); Console.WriteLine("\n\n Effet Appliqué"); break; case 8: image.DetecBord(); Console.WriteLine("\n\n Effet Appliqué"); break; case 9: image.RenfocementBords(); Console.WriteLine("\n\n Effet Appliqué"); break; case 10: image.Repoussage(); Console.WriteLine("\n\n Effet Appliqué"); break; case 11: Console.Write("\n\n Entrez le chemin souhaitée pour sauvegarder l'histogramme (n'oubliez pas le '.bmp') > "); chemin = Console.ReadLine(); image.Histogramme(); image.From_Image_To_File(chemin); break; case 12: Console.Write("\n\n Entrez le chemin de l'image à cacher > "); chemin = Console.ReadLine(); image.ImageDansImage(chemin); Console.WriteLine("\n\n Image cachée"); break; case 13: image.Décodage(); Console.WriteLine("\n\n Image décodée"); break; case 14: Console.WriteLine("\n\n Cette innovation est un ajustement automatique de la luminosité \n le programme va chercher à avoir une luminosité moyenne en changeant de la meme facon la luminosté de tous les pixels \n Attention : cela ne marchera pas (ou mal) sur les images avec de forts changement de luminosité ou sur des images extremement sombre ou claire"); image.amelioration(); Console.WriteLine("\n\n Image améliorée"); break; case 15: fin2 = false; break; } } break; case 3: Console.Write("\n\n Entrez la largeur souhaitée pour la fractale > "); int large = Convert.ToInt32(Console.ReadLine()); Console.Write("\n\n Entrez la hauteur souhaitée pour la fractale > "); int haut = Convert.ToInt32(Console.ReadLine()); MyImage fract = new MyImage(large, haut); Console.Write("\n\n Entrez le chemin souhaitée pour sauvegarder la fractale (n'oubliez pas le '.bmp') > "); chemin = Console.ReadLine(); fract.From_Image_To_File(chemin); break; case 4: Console.Write("\n\n Entre le message que vous voulez coder dans le QRcode > "); string message = Console.ReadLine(); Qrcode qr = new Qrcode(message); if (qr.Version != 0) { Console.Write("\n\n Entrez le chemin souhaitée pour sauvegarder le QRcode (n'oubliez pas le '.bmp') > "); chemin = Console.ReadLine(); qr.generation(chemin); } break; case 5: fin = false; break; } } }
public void generation(string nom) { switch (this.version) { case (1): Pixel[,] code = new Pixel[21, 21]; //tracage de tous les separateurs for (int i = 0; i < 7; i++) { code[i, 0] = new Pixel((byte)0, (byte)0, (byte)0); code[0, i] = new Pixel((byte)0, (byte)0, (byte)0); code[6, i] = new Pixel((byte)0, (byte)0, (byte)0); code[i, 6] = new Pixel((byte)0, (byte)0, (byte)0); code[20 - i, 0] = new Pixel((byte)0, (byte)0, (byte)0); code[20, i] = new Pixel((byte)0, (byte)0, (byte)0); code[14, i] = new Pixel((byte)0, (byte)0, (byte)0); code[20 - i, 6] = new Pixel((byte)0, (byte)0, (byte)0); code[i, 20] = new Pixel((byte)0, (byte)0, (byte)0); code[0, 20 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[6, 20 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[i, 14] = new Pixel((byte)0, (byte)0, (byte)0); } for (int i = 0; i < 5; i++) { code[1 + i, 1] = new Pixel((byte)255, (byte)255, (byte)255); code[1, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[5, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[1 + i, 5] = new Pixel((byte)255, (byte)255, (byte)255); code[19 - i, 1] = new Pixel((byte)255, (byte)255, (byte)255); code[19, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[15, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[19 - i, 5] = new Pixel((byte)255, (byte)255, (byte)255); code[1 + i, 19] = new Pixel((byte)255, (byte)255, (byte)255); code[1, 19 - i] = new Pixel((byte)255, (byte)255, (byte)255); code[5, 19 - i] = new Pixel((byte)255, (byte)255, (byte)255); code[1 + i, 15] = new Pixel((byte)255, (byte)255, (byte)255); } for (int i = 0; i < 3; i++) { code[2 + i, 2] = new Pixel((byte)0, (byte)0, (byte)0); code[2, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[4, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[2 + i, 4] = new Pixel((byte)0, (byte)0, (byte)0); code[18 - i, 2] = new Pixel((byte)0, (byte)0, (byte)0); code[18, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[16, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[18 - i, 4] = new Pixel((byte)0, (byte)0, (byte)0); code[2 + i, 18] = new Pixel((byte)0, (byte)0, (byte)0); code[2, 18 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[4, 18 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[2 + i, 16] = new Pixel((byte)0, (byte)0, (byte)0); } code[3, 3] = new Pixel((byte)0, (byte)0, (byte)0); code[17, 3] = new Pixel((byte)0, (byte)0, (byte)0); code[3, 17] = new Pixel((byte)0, (byte)0, (byte)0); //patern de séparation for (int i = 0; i < 8; i++) { code[7, i] = new Pixel((byte)255, (byte)255, (byte)255); code[i, 7] = new Pixel((byte)255, (byte)255, (byte)255); code[13, i] = new Pixel((byte)255, (byte)255, (byte)255); code[20 - i, 7] = new Pixel((byte)255, (byte)255, (byte)255); code[i, 13] = new Pixel((byte)255, (byte)255, (byte)255); code[7, 20 - i] = new Pixel((byte)255, (byte)255, (byte)255); } //motifs de synchronisation for (int i = 8; i < 13; i++) { if (i % 2 == 0) { code[i, 6] = new Pixel((byte)0, (byte)0, (byte)0); code[6, i] = new Pixel((byte)0, (byte)0, (byte)0); } else { code[6, i] = new Pixel((byte)255, (byte)255, (byte)255); code[i, 6] = new Pixel((byte)255, (byte)255, (byte)255); } } //implantation du masque for (int i = 0; i < 15; i++) { if (masque[i] == '1') { if (i < 6) { code[8, i] = new Pixel((byte)0, (byte)0, (byte)0); } else if (i < 8) { code[8, 1 + i] = new Pixel((byte)0, (byte)0, (byte)0); } else if (i == 8) { code[7, 8] = new Pixel((byte)0, (byte)0, (byte)0); } else { code[14 - i, 8] = new Pixel((byte)0, (byte)0, (byte)0); }; if (i < 7) { code[20 - i, 8] = new Pixel((byte)0, (byte)0, (byte)0); } else { code[8, 6 + i] = new Pixel((byte)0, (byte)0, (byte)0); } } else { if (i < 6) { code[8, i] = new Pixel((byte)255, (byte)255, (byte)255); } else if (i < 8) { code[8, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); } else if (i == 8) { code[7, 8] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[14 - i, 8] = new Pixel((byte)255, (byte)255, (byte)255); }; if (i < 7) { code[20 - i, 8] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[8, 6 + i] = new Pixel((byte)255, (byte)255, (byte)255); } } } //dark module code[13, 8] = new Pixel((byte)0, (byte)0, (byte)0); //ecriture du code bool montee = true; int index = 0; for (int x = 20; x > 0; x -= 2) { if (x == 6) { x--; } if (montee) { for (int y = 20; y >= 0; y--) { if (code[y, x] == null) { if (data[index] == (byte)0) { code[y, x] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } if (code[y, x - 1] == null) { if (data[index] == (byte)0) { code[y, x - 1] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x - 1] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } } montee = false; } else { for (int y = 0; y < 21; y++) { if (code[y, x] == null) { if (data[index] == (byte)0) { code[y, x] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } if (code[y, x - 1] == null) { if (data[index] == (byte)0) { code[y, x - 1] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x - 1] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } } montee = true; } } MyImage QR = new MyImage(21, code); QR.Agrandissement(4); QR.Miroir('V'); QR.From_Image_To_File(nom); break; case (2): code = new Pixel[25, 25]; //tracage de tous les separateurs for (int i = 0; i < 7; i++) { code[i, 0] = new Pixel((byte)0, (byte)0, (byte)0); code[0, i] = new Pixel((byte)0, (byte)0, (byte)0); code[6, i] = new Pixel((byte)0, (byte)0, (byte)0); code[i, 6] = new Pixel((byte)0, (byte)0, (byte)0); code[24 - i, 0] = new Pixel((byte)0, (byte)0, (byte)0); code[24, i] = new Pixel((byte)0, (byte)0, (byte)0); code[18, i] = new Pixel((byte)0, (byte)0, (byte)0); code[24 - i, 6] = new Pixel((byte)0, (byte)0, (byte)0); code[i, 24] = new Pixel((byte)0, (byte)0, (byte)0); code[0, 24 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[6, 24 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[i, 18] = new Pixel((byte)0, (byte)0, (byte)0); } for (int i = 0; i < 5; i++) { code[1 + i, 1] = new Pixel((byte)255, (byte)255, (byte)255); code[1, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[5, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[1 + i, 5] = new Pixel((byte)255, (byte)255, (byte)255); code[23 - i, 1] = new Pixel((byte)255, (byte)255, (byte)255); code[23, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[19, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[23 - i, 5] = new Pixel((byte)255, (byte)255, (byte)255); code[1 + i, 23] = new Pixel((byte)255, (byte)255, (byte)255); code[1, 23 - i] = new Pixel((byte)255, (byte)255, (byte)255); code[5, 23 - i] = new Pixel((byte)255, (byte)255, (byte)255); code[1 + i, 19] = new Pixel((byte)255, (byte)255, (byte)255); } for (int i = 0; i < 3; i++) { code[2 + i, 2] = new Pixel((byte)0, (byte)0, (byte)0); code[2, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[4, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[2 + i, 4] = new Pixel((byte)0, (byte)0, (byte)0); code[22 - i, 2] = new Pixel((byte)0, (byte)0, (byte)0); code[22, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[20, 2 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[22 - i, 4] = new Pixel((byte)0, (byte)0, (byte)0); code[2 + i, 22] = new Pixel((byte)0, (byte)0, (byte)0); code[2, 22 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[4, 22 - i] = new Pixel((byte)0, (byte)0, (byte)0); code[2 + i, 20] = new Pixel((byte)0, (byte)0, (byte)0); } code[3, 3] = new Pixel((byte)0, (byte)0, (byte)0); code[21, 3] = new Pixel((byte)0, (byte)0, (byte)0); code[3, 21] = new Pixel((byte)0, (byte)0, (byte)0); //patern de séparation for (int i = 0; i < 8; i++) { code[7, i] = new Pixel((byte)255, (byte)255, (byte)255); code[i, 7] = new Pixel((byte)255, (byte)255, (byte)255); code[17, i] = new Pixel((byte)255, (byte)255, (byte)255); code[24 - i, 7] = new Pixel((byte)255, (byte)255, (byte)255); code[i, 13] = new Pixel((byte)255, (byte)255, (byte)255); code[7, 24 - i] = new Pixel((byte)255, (byte)255, (byte)255); } //motifs de synchronisation for (int i = 8; i < 17; i++) { if (i % 2 == 0) { code[i, 6] = new Pixel((byte)0, (byte)0, (byte)0); code[6, i] = new Pixel((byte)0, (byte)0, (byte)0); } else { code[6, i] = new Pixel((byte)255, (byte)255, (byte)255); code[i, 6] = new Pixel((byte)255, (byte)255, (byte)255); } } //implantation du masque for (int i = 0; i < 15; i++) { if (masque[i] == '1') { if (i < 6) { code[8, i] = new Pixel((byte)0, (byte)0, (byte)0); } else if (i < 8) { code[8, 1 + i] = new Pixel((byte)0, (byte)0, (byte)0); } else if (i == 8) { code[7, 8] = new Pixel((byte)0, (byte)0, (byte)0); } else { code[14 - i, 8] = new Pixel((byte)0, (byte)0, (byte)0); } if (i < 7) { code[24 - i, 8] = new Pixel((byte)0, (byte)0, (byte)0); } else { code[8, 10 + i] = new Pixel((byte)0, (byte)0, (byte)0); } } else { if (i < 6) { code[8, i] = new Pixel((byte)255, (byte)255, (byte)255); } else if (i < 8) { code[8, 1 + i] = new Pixel((byte)255, (byte)255, (byte)255); } else if (i == 8) { code[7, 8] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[14 - i, 8] = new Pixel((byte)255, (byte)255, (byte)255); } if (i < 7) { code[24 - i, 8] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[8, 10 + i] = new Pixel((byte)255, (byte)255, (byte)255); } } } //dark module code[8, 13] = new Pixel((byte)0, (byte)0, (byte)0); // module d'alignement for (int i = 0; i < 5; i++) { code[16 + i, 16] = new Pixel((byte)0, (byte)0, (byte)0); code[16, 16 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[20, 16 + i] = new Pixel((byte)0, (byte)0, (byte)0); code[16 + i, 20] = new Pixel((byte)0, (byte)0, (byte)0); } for (int i = 0; i < 3; i++) { code[17 + i, 17] = new Pixel((byte)255, (byte)255, (byte)255); code[17, 17 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[19, 17 + i] = new Pixel((byte)255, (byte)255, (byte)255); code[17 + i, 19] = new Pixel((byte)255, (byte)255, (byte)255); } code[18, 18] = new Pixel((byte)0, (byte)0, (byte)0); //ecriture du code montee = true; index = 0; for (int x = 24; x > 0; x -= 2) { if (x == 6) { x--; } if (montee) { for (int y = 24; y >= 0; y--) { if (code[y, x] == null) { if (data[index] == (byte)0) { code[y, x] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } if (code[y, x - 1] == null) { if (data[index] == (byte)0) { code[y, x - 1] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x - 1] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } } montee = false; } else { for (int y = 0; y < 25; y++) { if (code[y, x] == null) { if (data[index] == (byte)0) { code[y, x] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } if (code[y, x - 1] == null) { if (data[index] == (byte)0) { code[y, x - 1] = new Pixel((byte)255, (byte)255, (byte)255); } else { code[y, x - 1] = new Pixel((byte)0, (byte)0, (byte)0); } index++; } } montee = true; } } QR = new MyImage(25, code); QR.Agrandissement(4); QR.Miroir('V'); QR.From_Image_To_File(nom); break; } }