예제 #1
0
        // конструктор
        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++;
                }
            }
        }
예제 #2
0
 // кнопка '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 = "Что-то пошло не так при открытии файла, попробуйте позже"; //в случае какой-то неполадки
     }
 }
예제 #3
0
 // функция вызова третьего метода
 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 = "Введите текст!"; // при отсутствии текста
         }
     }
 }
예제 #4
0
 // функция вызова второго метода
 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 = "Введите текст!"; // при отсутствии текста
         }
     }
 }
예제 #5
0
 // функция вызова первого метода
 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 = "Введите текст!"; // при отсутствии текста
         }
     }
 }