コード例 #1
0
        public Bitmap dowolnyPlik(int bityRed, int bityGreen, int bityBlue)
        {
            int           poz = 0;
            int           maskaRed = 0xFF << bityRed, maskaGreen = 0xFF << bityGreen, maskaBlue = 0xFF << bityBlue;
            StringBuilder dlugoscKoncowa = new StringBuilder(), dlugoscPKoncowa = new StringBuilder(), dlugosc2Koncowa = new StringBuilder();

            //Ile pixeli na dlugosc
            dlugoscPKoncowa.Append(Convert.ToString(bity.Length, 2));
            int ilosc = dlugoscPKoncowa.Length;
            int ilePixeli = 0;

            while (ilosc >= 0)
            {
                ilosc -= (bityRed + bityGreen + bityBlue);
                ilePixeli++;
            }
            while ((bityRed + bityGreen + bityBlue) * ilePixeli > dlugoscPKoncowa.Length)
            {
                dlugoscPKoncowa.Insert(0, "0");
            }
            dlugoscKoncowa.Append(Convert.ToString(ilePixeli, 2));
            while ((bityRed + bityGreen + bityBlue) * 2 > dlugoscKoncowa.Length)
            {
                dlugoscKoncowa.Insert(0, "0");
            }
            //
            int ilosc2 = bityRozszerzenie.Length;
            int ilePixeli2 = 0;

            while (ilosc2 >= 0)
            {
                ilosc2 -= (bityRed + bityGreen + bityBlue);
                ilePixeli2++;
            }
            while (bityRozszerzenie.Length % ((bityRed + bityGreen + bityBlue) * ilePixeli2) != 0)
            {
                bityRozszerzenie.Append("0");
            }
            dlugosc2Koncowa.Append(Convert.ToString(ilePixeli2, 2));
            while ((bityRed + bityGreen + bityBlue) * 2 > dlugosc2Koncowa.Length)
            {
                dlugosc2Koncowa.Insert(0, "0");
            }
            //Wartosci
            int IloscZapisanychDlugosci = 0, iloscZapisanychRozszerzenie = 0;
            //int temp = bity.Length - (int)Math.Floor((bity.Length / (bityRed + bityGreen + bityBlue)) * (bityRed + bityGreen + bityBlue) * 1.0);
            String BityWyjsciowe;

            while (bity.Length % (bityRed + bityGreen + bityBlue) != 0)
            {
                bity.Append("0");
            }
            BityWyjsciowe = bity.ToString();
            int dlugoscCalosc = Convert.ToInt32(bity.Length);

            for (int q = 0; q < this.img.Width; q++)
            {
                for (int w = 0; w < this.img.Height; w++)
                {
                    Color pixel = this.img.GetPixel(q, w);
                    if (q == 0 && w <= 1)
                    {
                        int wartoscR = Convert.ToInt32(dlugoscKoncowa.ToString().Substring(poz, bityRed), 2);
                        poz += bityRed;
                        int wartoscG = Convert.ToInt32(dlugoscKoncowa.ToString().Substring(poz, bityGreen), 2);
                        poz += bityGreen;
                        int wartoscB = Convert.ToInt32(dlugoscKoncowa.ToString().Substring(poz, bityBlue), 2);
                        poz += bityBlue;
                        this.img.SetPixel(q, w, Color.FromArgb((pixel.R & maskaRed) + wartoscR, (pixel.G & maskaGreen) + wartoscG
                                                               , (pixel.B & maskaBlue) + wartoscB));
                        Console.WriteLine(((pixel.R & maskaRed) + wartoscR, (pixel.G & maskaGreen) + wartoscG
                                           , (pixel.B & maskaBlue) + wartoscB).ToString());
                        continue;
                    }
                    if (q == 0 && (w == 2 || w == 3))
                    {
                        if (q == 0 && w == 2)
                        {
                            poz = 0;
                        }
                        int wartoscR = Convert.ToInt32(dlugosc2Koncowa.ToString().Substring(poz, bityRed), 2);
                        poz += bityRed;
                        int wartoscG = Convert.ToInt32(dlugosc2Koncowa.ToString().Substring(poz, bityGreen), 2);
                        poz += bityGreen;
                        int wartoscB = Convert.ToInt32(dlugosc2Koncowa.ToString().Substring(poz, bityBlue), 2);
                        poz += bityBlue;
                        this.img.SetPixel(q, w, Color.FromArgb((pixel.R & maskaRed) + wartoscR, (pixel.G & maskaGreen) + wartoscG
                                                               , (pixel.B & maskaBlue) + wartoscB));
                        continue;
                    }
                    if (IloscZapisanychDlugosci < ilePixeli)
                    {
                        if (IloscZapisanychDlugosci == 0)
                        {
                            poz = 0;
                        }
                        int wartoscR = Convert.ToInt32(dlugoscPKoncowa.ToString().Substring(poz, bityRed), 2);
                        poz += bityRed;
                        int wartoscG = Convert.ToInt32(dlugoscPKoncowa.ToString().Substring(poz, bityGreen), 2);
                        poz += bityGreen;
                        int wartoscB = Convert.ToInt32(dlugoscPKoncowa.ToString().Substring(poz, bityBlue), 2);
                        poz += bityBlue;
                        this.img.SetPixel(q, w, Color.FromArgb((pixel.R & maskaRed) + wartoscR, (pixel.G & maskaGreen) + wartoscG
                                                               , (pixel.B & maskaBlue) + wartoscB));
                        IloscZapisanychDlugosci++;
                        continue;
                    }
                    if (iloscZapisanychRozszerzenie < ilePixeli2)
                    {
                        if (iloscZapisanychRozszerzenie == 0)
                        {
                            poz = 0;
                        }
                        int wartoscR = Convert.ToInt32(bityRozszerzenie.ToString().Substring(poz, bityRed), 2);
                        poz += bityRed;
                        int wartoscG = Convert.ToInt32(bityRozszerzenie.ToString().Substring(poz, bityGreen), 2);
                        poz += bityGreen;
                        int wartoscB = Convert.ToInt32(bityRozszerzenie.ToString().Substring(poz, bityBlue), 2);
                        poz += bityBlue;
                        this.img.SetPixel(q, w, Color.FromArgb((pixel.R & maskaRed) + wartoscR, (pixel.G & maskaGreen) + wartoscG
                                                               , (pixel.B & maskaBlue) + wartoscB));
                        iloscZapisanychRozszerzenie++;
                        continue;
                    }
                    if (dlugoscCalosc > 0)
                    {
                        if (dlugoscCalosc == Convert.ToInt32(bity.Length))
                        {
                            poz = 0;
                        }
                        int wartoscR1 = Convert.ToInt32(BityWyjsciowe.ToString().Substring(poz, bityRed), 2);
                        poz += bityRed;
                        int wartoscG1 = Convert.ToInt32(BityWyjsciowe.ToString().Substring(poz, bityGreen), 2);
                        poz += bityGreen;
                        int wartoscB1 = Convert.ToInt32(BityWyjsciowe.ToString().Substring(poz, bityBlue), 2);
                        poz           += bityBlue;
                        dlugoscCalosc -= (bityRed + bityGreen + bityBlue);
                        this.img.SetPixel(q, w, Color.FromArgb((pixel.R & maskaRed) + wartoscR1, (pixel.G & maskaGreen) + wartoscG1
                                                               , (pixel.B & maskaBlue) + wartoscB1));
                        continue;
                    }
                    if (dlugoscCalosc <= 0)
                    {
                        break;
                    }
                }
                if (dlugoscCalosc <= 0)
                {
                    break;
                }
            }
            return(this.img);
        }
コード例 #2
0
        public void kodowanie(int bitySciezka, StringBuilder bityRozszerzenie, StringBuilder bity)
        {
            int poz   = 0;
            int maska = 0;

            if (this.probkowanie == 8)
            {
                maska = 0xFF << bitySciezka;
            }
            else if (this.probkowanie == 16)
            {
                maska = 0xFFF << bitySciezka;
            }
            Console.WriteLine(Convert.ToString(maska, 2));
            StringBuilder dlugoscKoncowa = new StringBuilder(), dlugoscPKoncowa = new StringBuilder(), dlugosc2Koncowa = new StringBuilder();

            dlugoscPKoncowa.Append(Convert.ToString(bity.Length, 2));
            int ilosc = dlugoscPKoncowa.Length;
            int ilePixeli = 0;

            while (ilosc > 0)
            {
                ilosc -= bitySciezka;
                ilePixeli++;
            }
            while (bitySciezka * ilePixeli > dlugoscPKoncowa.Length)
            {
                dlugoscPKoncowa.Insert(0, "0");
            }
            dlugoscKoncowa.Append(Convert.ToString(ilePixeli, 2));
            while (bitySciezka * 3 > dlugoscKoncowa.Length)
            {
                dlugoscKoncowa.Insert(0, "0");
            }
            //
            int ilosc2 = bityRozszerzenie.Length;
            int ilePixeli2 = 0;

            while (ilosc2 > 0)
            {
                ilosc2 -= bitySciezka;
                ilePixeli2++;
            }
            while (bityRozszerzenie.Length % (bitySciezka * ilePixeli2) != 0)
            {
                bityRozszerzenie.Append("0");
            }
            dlugosc2Koncowa.Append(Convert.ToString(ilePixeli2, 2));
            while (bitySciezka > dlugosc2Koncowa.Length)
            {
                dlugosc2Koncowa.Insert(0, "0");
            }
            String BityWyjsciowe;

            /*while (bity.Length % (int)this.probkowanie != 0)
             * {
             *  bity.Append("0");
             * }*/
            BityWyjsciowe = bity.ToString();
            int  dlugoscCalosc = Convert.ToInt32(bity.Length);
            int  IloscZapisanychDlugosci = 0, iloscZapisanychRozszerzenie = 0;
            uint wartoscDoZapisu = 0;

            for (int q = 0; q < sample; q++)
            {
                if (q >= 0 && q <= 2)
                {
                    wartoscDoZapisu = (Lista.ElementAt(q) & (uint)maska) + ((uint)Convert.ToInt16(dlugoscKoncowa.ToString().Substring(poz, bitySciezka), 2));
                    poz            += bitySciezka;
                    Lista[q]        = wartoscDoZapisu;
                    continue;
                }
                if (q == 3)
                {
                    poz             = 0;
                    wartoscDoZapisu = (Lista.ElementAt(q) & (uint)maska) + ((uint)Convert.ToInt16(dlugosc2Koncowa.ToString().Substring(poz, bitySciezka), 2));
                    Lista[q]        = wartoscDoZapisu;
                    continue;
                }
                if (IloscZapisanychDlugosci < ilePixeli)
                {
                    if (IloscZapisanychDlugosci == 0)
                    {
                        poz = 0;
                    }
                    wartoscDoZapisu = (Lista.ElementAt(q) & (uint)maska) + ((uint)Convert.ToInt16(dlugoscPKoncowa.ToString().Substring(poz, bitySciezka), 2));
                    poz            += bitySciezka;
                    Lista[q]        = wartoscDoZapisu;
                    IloscZapisanychDlugosci++;
                    continue;
                }
                if (iloscZapisanychRozszerzenie < ilePixeli2)
                {
                    if (iloscZapisanychRozszerzenie == 0)
                    {
                        poz = 0;
                    }
                    wartoscDoZapisu = (Lista.ElementAt(q) & (uint)maska) + ((uint)Convert.ToInt16(bityRozszerzenie.ToString().Substring(poz, bitySciezka), 2));
                    poz            += bitySciezka;
                    Lista[q]        = wartoscDoZapisu;
                    iloscZapisanychRozszerzenie++;
                    continue;
                }
                if (dlugoscCalosc == Convert.ToInt32(bity.Length))
                {
                    poz = 0;
                }
                wartoscDoZapisu = (Lista.ElementAt(q) & (uint)maska) + ((uint)Convert.ToInt16(BityWyjsciowe.ToString().Substring(poz, bitySciezka), 2));
                poz            += bitySciezka;
                Lista[q]        = wartoscDoZapisu;
                dlugoscCalosc  -= bitySciezka;
                if (dlugoscCalosc <= 0)
                {
                    break;
                }
            }
        }