public static Bitmap sprawdz_pojemnosc(Bitmap bmp, string text, int zapis, bool indeks) { Color pixel; Pixel Bitmap = new Pixel(bmp); Bitmap.LockBits(); string t = text; int licz = 0; int licz2 = 0; string[] znak = new string[t.Length]; for (int i = 0; i < Bitmap.wysokosc; i++) { for (int j = 0; j < Bitmap.szerokosc; j++) { if (licz < znak.Length) { pixel = Bitmap.GetPixel(i, j); Bitmap.SetPixel(i, j, Color.FromArgb(255, pixel.G, pixel.B)); licz2++; if (licz2 == zapis - 1 && znak.Length > licz) { licz2 = 0; licz++; j++; } } } } Bitmap bmp_save = Bitmap.Save(); // MessageBox.Show(Convert.ToString(test)); return(bmp_save); }
public static Bitmap kodowanie(string text, Bitmap bmp, string indeks, int zapis, int xor, bool xor_aktywacja) { Color pixel; Pixel Bitmap = new Pixel(bmp); Bitmap.LockBits(); int licznik_multi = 0; string t = text; long zakres = t.Length * (zapis + 1); int licz = 0; int licz2 = 0; int[] value = new int[text.Length]; string[] binary = new string[text.Length]; int licz_a = 0; string[] znak = new string[t.Length]; string[] test = new string[t.Length]; char[] wiadomosc = new char[text.Length]; string[] temp_binary = new string[binary.Length]; string ilosc_bitow = Convert.ToString(t.Length, 2); int l = 0; for (int j = (Bitmap.szerokosc - 1); j > (Bitmap.szerokosc - 1) - ilosc_bitow.Length; j--) { pixel = Bitmap.GetPixel(Bitmap.wysokosc - 1, j); int lsb_ilosc_bitow = (Convert.ToInt32((pixel.R & 254)) + Convert.ToInt32(ilosc_bitow[l].ToString())); Bitmap.SetPixel(Bitmap.wysokosc - 1, j, Color.FromArgb(lsb_ilosc_bitow, pixel.G, pixel.B)); l++; } foreach (var a in t) { binary[licz_a] = Convert.ToString(Convert.ToChar(a), 2); while (binary[licz_a].Length < zapis) { binary[licz_a] = "0" + binary[licz_a]; } for (int k = 0; k < binary[licz_a].Length; k++) { temp_binary[licz_a] = temp_binary[licz_a] + Convert.ToString(binary[licz_a][binary[licz_a].Length - (k + 1)]); // teraz dobrze } znak[licz_a] = temp_binary[licz_a]; licz_a++; } for (int i = 0; i < Bitmap.wysokosc; i++) { for (int j = 0; j < Bitmap.szerokosc; j++) { pixel = Bitmap.GetPixel(i, j); if (licz < znak.Length) { if (indeks == "Multi") // test wszystkie kanały - multi { if (xor_aktywacja == true) { if (licznik_multi == 4) { licznik_multi = 0; } if (licznik_multi == 0) { int lsb_M = (Convert.ToInt32((pixel.A & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.R, pixel.G, pixel.B)); // A } if (licznik_multi == 1) { int lsb_M = (Convert.ToInt32((pixel.B & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_M)); // B } if (licznik_multi == 2) { int lsb_M = (Convert.ToInt32((pixel.R & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.G, pixel.B)); // R } if (licznik_multi == 3) { int lsb_M = (Convert.ToInt32((pixel.G & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_M, pixel.B)); // G } licznik_multi++; } else { if (licznik_multi == 4) { licznik_multi = 0; } if (licznik_multi == 0) { int lsb_M = (Convert.ToInt32((pixel.A & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.R, pixel.G, pixel.B)); // A } if (licznik_multi == 1) { int lsb_M = (Convert.ToInt32((pixel.B & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_M)); // B } if (licznik_multi == 2) { int lsb_M = (Convert.ToInt32((pixel.R & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.G, pixel.B)); // R } if (licznik_multi == 3) { int lsb_M = (Convert.ToInt32((pixel.G & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_M, pixel.B)); // G } licznik_multi++; } } if (indeks == "R") { if (xor_aktywacja == true) { int lsb_R = (Convert.ToInt32((pixel.R & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(lsb_R, pixel.G, pixel.B)); } else { int lsb_R = (Convert.ToInt32((pixel.R & 254)) + Convert.ToInt32(znak[licz][licz2].ToString())); Bitmap.SetPixel(i, j, Color.FromArgb(lsb_R, pixel.G, pixel.B)); } } else if (indeks == "G") { if (xor_aktywacja == true) { int lsb_G = (Convert.ToInt32((pixel.G & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_G, pixel.B)); } else { int lsb_G = (Convert.ToInt32((pixel.G & 254)) + Convert.ToInt32(znak[licz][licz2].ToString())); Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_G, pixel.B)); } } else if (indeks == "B") { if (xor_aktywacja == true) { int lsb_B = (Convert.ToInt32((pixel.B & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_B)); } else { int lsb_B = (Convert.ToInt32((pixel.B & 254)) + Convert.ToInt32(znak[licz][licz2].ToString())); Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_B)); } } // kanał A else if (indeks == "A") { if (xor_aktywacja == true) { int lsb_A = (Convert.ToInt32((pixel.A & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor Bitmap.SetPixel(i, j, Color.FromArgb(lsb_A, pixel.R, pixel.G, pixel.B)); } else { int lsb_A = (Convert.ToInt32((pixel.A & 254)) + Convert.ToInt32(znak[licz][licz2].ToString())); Bitmap.SetPixel(i, j, Color.FromArgb(lsb_A, pixel.R, pixel.G, pixel.B)); } } licz2++; if (licz2 == zapis - 1 && znak.Length > licz) { licz2 = 0; licz++; j++; } } if (i == Bitmap.wysokosc - 1 && j == Bitmap.szerokosc - 1) { Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, ilosc_bitow.Length ^ xor)); } } } Bitmap bmp_save = Bitmap.Save(); // MessageBox.Show(Convert.ToString(test)); return(bmp_save); }