예제 #1
0
        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);
        }
예제 #2
0
        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);
        }