я raquo ;, Увага ); return; }//Якщо немає тексту, то висновок помилки
} (Bits == 0) {MessageBox.Show ( Задайте розрядність raquo ;, Увага ); return; }//Якщо не вибрана розрядність видає помилку (Colors [0] == 0 amp; amp; Colors [1] == 0 amp; amp; Colors [2] == 0) {MessageBox.Show ( Задайте колірні канали raquo ;, Увага ); return; }//Якщо не обрані канали, видає помилку (CryptMode == true)//якщо метод горизонтальний, то перераховує підсумкове поле для запису в зображенні
{= sverhu; MaxShift1=vysota - snizu;//=Sleva; MaxShift2=shirina - sprava;//
}//якщо метод вертикальний, то перераховує підсумкове поле для запису в зображенні
{= sleva; MaxShift1=shirina - sprava;//=Sverhu; MaxShift2=vysota - snizu;//
}=MessageBytes.Length;// обнулення змінних для запису
SendingByte=MessageBytes [0];// призначаємо SendingByte перший байт повідомлення=0;// обнуляем індекс масиву повідомлення=0;// обнуляем лічильник переданого біта=new Bitmap (CryptImage);// скопіювати зображення для запису
for (int y=MinShift1; y lt; MaxShift1 amp; amp; Index lt; MessageSize; y +=interval)//цикл записи по вертикалі (int x=MinShift2; x lt; MaxShift2 amp ; amp; Index lt; MessageSize; x +=interval)//цикл записи по горизонталі
{(CryptMode == true) ColorVAR=image.GetPixel (x, y); else ColorVAR=image.GetPixel (y, x);
RGB [0]=ColorVAR.R;// присвоєння червоного каналу [1]=ColorVAR.G;// присвоєння зеленого каналу [2]=ColorVAR.B;// присвоєння синього каналу
for (ColorPosition=0; ColorPosition lt; 3 amp; amp; Index lt; MessageSize; ColorPosition ++)//перебираємо колірні канали
{((Colors [ColorPosition] amp; 1) == 1)//звіряємо канал з маскою квітів
{(BitPosition=7; BitPosition gt;=0; BitPosition--)//перебираємо розрядність
{(((Bits gt; gt; BitPosition) amp; 1) == 1)//звіряємо розряд з маскою бітів
{((SendingByte amp; 1) == 1) RGB [ColorPosition] |=(byte) Math.Pow (2, BitPosition); RGB [ColorPosition] amp;=(byte) ~ ( byte) Math.Pow (2, BitPosition);// для запису одиниці використовуємо АБО, для запису нуля ~ І
SendingBit ++;// збільшуємо лічильник переданих (SendingBit == 8)//передали байт
{(Index + 1 lt; MessageSize)//перевіряємо вихід за межі масиву
{++;// збільшуємо індекс в масиві=0;// обнуляем лічильник бітів=MessageBytes [Index];// записуємо новий байт в масив
} {Index ++; break; }//Якщо вийшли за межі масиву - виходимо з циклу
} SendingByte gt; gt;=1;// зрушуємо передається байт на один вправо
}
}
}
}=Color.FromArgb (RGB [0], RGB [1], RGB [2]);// створюємо новий колір (CryptMode == true) image.SetPixel (x, y, newColorVAR); else image.SetPixel (y, x, newColorVAR);// залежно від методу запису, встановлюємо нове значення компонент пікселя
}. Image=image;// встановлюємо ізображеніе.SizeMode=PictureBoxSizeMode.Zoom;// масштабується ізображеніе.Enabled=true;// включаємо кнопку Зберегти зображення (test == true)//якщо режим програми Читання АБО обраний демонстративний режим
{. Show ( вважається текст raquo ;, Увага );// виведення тексту
DecryptImage=new Bitmap (image);// створюємо копію ізображенія_Click (sender, e);//
}
} void checkBox9_CheckedChanged (object sender, EventArgs e)//вибір червоного колірного каналу
{[0] ^=1;// якщо стоїть червоний, то в масиві, в 1 змінну відзначається 1 ();// викликає перевірку на можливість запису
} void checkBox10_CheckedChanged (object sender, EventArgs e)//вибір зеленого колірного каналу
{[1] ^=1;// якщо стоїть червоний, то в масиві, у 2 змінну відзначається 1 ();// викликає перевірку на можливість запису
} void checkBox11_CheckedChanged (object sender, EventArgs e)//вибір синього колірного каналу
{[2] ^=1;// якщо стоїть червоний, то в масиві, в 3 змінну відзначається 1 ();// викликає перевірку на можливість запису
} void Start2_Click (object sender, EventArgs e)//розкриття прихованої інформації
{(Bits == 0) {MessageBox.Show ( Задайте розрядність raquo ;, Увага ); return; }//Якщо не вибрана розрядність видає помилку (Colors [0] == 0 amp; amp; Colors [1] == 0 amp; amp; Colors [2] == 0) {MessageBox.Show ( Задайте колірні канали raquo ;, Увага ); return; }//Якщо не обрані канали,...