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