// конструктор public StegoBitmap(StegoBitmap stgBitmap, byte[] changedColour, Colours c) { RedColour = stgBitmap.RedColour; GreenColour = stgBitmap.GreenColour; BlueColour = stgBitmap.BlueColour; if (c == Colours.Red) { RedColour = changedColour; } if (c == Colours.Green) { GreenColour = changedColour; } if (c == Colours.Blue) { BlueColour = changedColour; } sourceBitmap = new Bitmap(stgBitmap.sourceBitmap.Width, stgBitmap.sourceBitmap.Height); int ind = 0; for (int i = 0; i < sourceBitmap.Width; i++) { for (int j = 0; j < sourceBitmap.Height; j++) { sourceBitmap.SetPixel(i, j, Color.FromArgb(RedColour[ind], GreenColour[ind], BlueColour[ind])); // устанавливает пиксель в нужном месте в соответвии с переданным цветом ind++; } } }
// кнопка 'OPEN' private void button1_Click(object sender, EventArgs e) { try { // выбираем рисунок, в котором будет хранится информация var open_dialog = new OpenFileDialog(); open_dialog.Title = "Открыть изображение"; // зададим фильтр файлов, чтобы в диалоговом окне можно было их отфильтровать по расширению. Фильтр задается в формате: Название_файлов|*.расширение. open_dialog.Filter = "JPEG файл(*.jpg)|*.jpg|" + "Bitmap файл(*.bmp)|*.bmp|" + "GIF файл(*.gif)|*.gif|" + "PNG файл(*.png)|*.png|" + "TIF файл(*.tif)|*.tif"; // показать диалоговое окно и определить, совпадает ли возвращемое значение с ОК open_dialog.CheckFileExists = true; // проверяет существование файла с указанным именем open_dialog.CheckPathExists = true; // проверяет существование пути к файлу с указанным именем if (open_dialog.ShowDialog() == DialogResult.OK) { if (bMap != null) // если поле с исходным изображением уже занято, то освободить все ресурсы { pictureBox1.Image.Dispose(); pictureBox1.Image = null; bMap = null; } if (bMapSteg != null) // если поле с измененным изображением уже занято, то освободить все ресурсы { pictureBox2.Image.Dispose(); pictureBox2.Image = null; bMapSteg = null; } textBox1.Text = labelAttention.Text = ""; // освобждаем поля с вводимым текстом и предупреждениями bMap = new StegoBitmap(new Bitmap(open_dialog.FileName)); // создаем новый экземпляр класса StegoBitmap для работы с изображением, путем инициализации из указанного файла нового экмземпляра Bitmap pictureBox1.Image = bMap.GetImage(); // задаем изображение в pictureBox1 label2.Text = bMap.FileSize; // размер изображения label4.Text = label8.Text = "зависит от метода"; // максимальное возможное число вводимых символов и число оставшихся символов label6.Text = "0"; // число введенных символов methodButton1.Checked = methodButton2.Checked = methodButton3.Checked = false; // никакой метод не выбран ColourBox1.SelectedIndex = ColourBox2.SelectedIndex = ColourBox3.SelectedIndex = CoefDiffBox.SelectedIndex = -1; //обнуляем все combobox } else { labelAttention.Text = "Отменено"; // если работа диалогового окна была приостановлена } } catch (Exception) { labelAttention.Text = "Что-то пошло не так при открытии файла, попробуйте позже"; //в случае какой-то неполадки } }
// функция вызова третьего метода public void Method3_Benham() { labelAttention.Text = ""; if (bMap == null) { labelAttention.Text = "Вставьте изображение!"; // проверка на наличие изображения } else { if (textBox1.Text != "") // проверка на наличие текста { try // проверка на выбор всех параметров { Colours colour = (Colours)ColourBox3.SelectedIndex; // цвет задаем в соответвии с выбранным в comboBox3, приводя к перечислению Colours var result = Benham.IsHiddenText(bMap, colour); // содержится ли скрытый текст if (!result || Attention(result)) // если нет скрытого текста или пользователь все равно хочет заменить его на новый { bMapSteg = Benham.Hide(bMap, textBox1.Text, colour); // создаем новый объект StegoBitmap, хранящий в себе скрытый текст pictureBox2.Image = bMapSteg.GetImage(); // задаем изображение в pictureBox2 } } catch (NullReferenceException) { string message = "Не выбран цвет для сокрытия текста"; string caption = "Отсутствие одного из параметров"; MessageBoxButtons button = MessageBoxButtons.OK; DialogResult res = MessageBox.Show(message, caption, button); // отобразить MessageBox } catch (ArgumentOutOfRangeException) { labelAttention.Text = "Число символов больше чем число пригодных для внедрения блоков. Выберете другой цвет/метод или уменьшите размер текста"; } catch (Exception) { labelAttention.Text = "Что-то пошло не так, попробуйте позже"; //в случае какой-то неполадки } } else { labelAttention.Text = "Введите текст!"; // при отсутствии текста } } }
// функция вызова второго метода public void Method2_KochZhao() { labelAttention.Text = ""; if (bMap == null) { labelAttention.Text = "Вставьте изображение!"; // проверка на наличие изображения } else { if (textBox1.Text != "") // проверка на наличие текста { try // проверка на выбор всех параметров { Colours colour = (Colours)ColourBox2.SelectedIndex; // цвет задаем в соответвии с выбранным в comboBox3, приводя к перечислению Colours bool findText = KochZhao.IsHiddenText(bMap, colour); // проверка на наличие уже внедренного текста if (!findText || Attention(findText)) { bMapSteg = KochZhao.Hide(bMap, textBox1.Text, colour, Convert.ToInt32(CoefDiffBox.SelectedItem.ToString())); // создаем новый объект StegoBitmap, хранящий в себе скрытый текст pictureBox2.Image = bMapSteg.GetImage(); // задаем изображение в pictureBox2 } } catch (NullReferenceException) { string message = "Не выбраны все параметры для сокрытия текста"; string caption = "Отсутствие одного из параметров"; MessageBoxButtons button = MessageBoxButtons.OK; DialogResult res = MessageBox.Show(message, caption, button); // отобразить MessageBox } catch (Exception) { labelAttention.Text = "Что-то пошло не так, попробуйте позже"; //в случае какой-то неполадки } } else { labelAttention.Text = "Введите текст!"; // при отсутствии текста } } }
// функция вызова первого метода public void Method1_LSB() { labelAttention.Text = ""; if (bMap == null) { labelAttention.Text = "Вставьте изображение!"; // проверка на наличие изображения } else { if (textBox1.Text != "") // проверка на наличие текста { var result = LSB.IsHiddenText(bMap, out Colours c); // содержится ли скрытый текст if (!result || Attention(result)) // если нет скрытого текста или пользователь все равно хочет заменить его на новый { try { Colours colour = (Colours)ColourBox1.SelectedIndex; // цвет задаем в соответвии с выбранным в comboBox1, приводя к перечислению Colours bMapSteg = LSB.Hide(bMap, textBox1.Text, colour); // создаем новый объект StegoBitmap, хранящий в себе скрытый текст pictureBox2.Image = bMapSteg.GetImage(); // задаем изображение в pictureBox2 } catch (NullReferenceException) { string message = "Не выбран цвет для сокрытия текста"; string caption = "Отсутствие цвета"; MessageBoxButtons button = MessageBoxButtons.OK; DialogResult res = MessageBox.Show(message, caption, button); // отобразить MessageBox } catch (Exception) { labelAttention.Text = "Что-то пошло не так, попробуйте позже"; //в случае какой-то неполадки } } } else { labelAttention.Text = "Введите текст!"; // при отсутствии текста } } }