Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2015, 23:14   #1
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию EncoderParameters в BMP

ребят такой вопрос - написал программу - метод LBS стеганография, после того, как я подгрузил изображение в программу и зашифровал в него текст, сохраняю его. Но после сохранения изображения, увеличивается его размер до 4 Мб. Пробовал использовать различные изображения (24 битовые, 16 цветовые, 256 цветовые, 32 битовые ) после их модификации и сохранения они тоже становятся 4 Мб. Только 32 битовое изображение как было 4 Мб так и осталось. и собственно вопрос - как мене сохранить изображение используя начальные EncoderParameters, т.е чтобы объём картинки после преобразования не менялся?? если нужен код программы пишите)

Последний раз редактировалось Strachey; 10.03.2015 в 12:47.
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:21   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем писать? Сразу бы выложили код.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.03.2015, 23:28   #3
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;ck(obj
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace crypto
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button4_Click(object sender, EventArgs e)
{
textBox2.Text = "";
textBox3.Text = "";
OpenFileDialog ofd1 = new OpenFileDialog();
if (ofd1.ShowDialog() == DialogResult.OK)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = Image.FromFile(ofd1.FileName);
textBox1.Text = ofd1.FileName;
}
}

private void button2_Click(object sender, EventArgs e)
{
Bitmap bmp1 = new Bitmap(pictureBox1.Image);
SaveFileDialog sfd = new SaveFileDialog();
sfd.DefaultExt = "bmp";
sfd.Filter = "BitMap picture (*.bmp)|*.bmp";
if (sfd.ShowDialog() == DialogResult.OK)
bmp1.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat. Bmp);
}

private void button1_Cliect sender, EventArgs e)
{
//РАБОТАЕМ С ДЛИНОЙ КЛЮЧА
int LengthKey = textBox3.Text.Length;
string LengthKeyDouble = Convert.ToString(LengthKey, 2);
while (LengthKeyDouble.Length != 8)
{
LengthKeyDouble = "0" + LengthKeyDouble;
}
Color PixelColor;
int k = 0;
int l = 0;
string KeyColor = "";
int ColorInt;
Bitmap bmp1 = new Bitmap(pictureBox1.Image);
while (l < 8)
{
PixelColor = bmp1.GetPixel(k, 0);
KeyColor = Convert.ToString(PixelColor.R, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
KeyColor = KeyColor.Remove(7, 1);
KeyColor = KeyColor + LengthKeyDouble.Substring(0, 1);
LengthKeyDouble = LengthKeyDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(KeyColor, 2);
bmp1.SetPixel(k, 0, Color.FromArgb(255, ColorInt, PixelColor.G, PixelColor.B));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 0);
l++;
if (l == 8)
break;
KeyColor = Convert.ToString(PixelColor.G, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
KeyColor = KeyColor.Remove(7, 1);
KeyColor = KeyColor + LengthKeyDouble.Substring(0, 1);
LengthKeyDouble = LengthKeyDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(KeyColor, 2);
bmp1.SetPixel(k, 0, Color.FromArgb(255, PixelColor.R, ColorInt, PixelColor.B));
pictureBox1.Image = bmp1;

PixelColor = bmp1.GetPixel(k, 0);
l++;
if (l == 8)
break;
KeyColor = Convert.ToString(PixelColor.B, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
KeyColor = KeyColor.Remove(7, 1);
KeyColor = KeyColor + LengthKeyDouble.Substring(0, 1);
LengthKeyDouble = LengthKeyDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(KeyColor, 2);
bmp1.SetPixel(k, 0, Color.FromArgb(255, PixelColor.R, PixelColor.G, ColorInt));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 0);
l++;
if (l == 8)
break;
k++;
}
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:28   #4
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

//КОНЕЦ РАБОТЫ С ДЛИНОЙ КЛЮЧА

//НАЧАЛО РАБОТЫ С КЛЮЧЕМ
byte[] Key = Encoding.ASCII.GetBytes(textBox3.Te xt);
string[] KeyDouble = new string[Key.Length];
for (int i = 0; i < Key.Length; i++)
{
KeyDouble[i] = Convert.ToString(Key[i], 2).ToString();
while (KeyDouble[i].Length != 8)
{
KeyDouble[i] = "0" + KeyDouble[i];
}
}
int QuantityKeyColor = textBox3.Text.Length * 8;
k = 0;
l = 0;
KeyColor = "";
string FullKeyDouble = "";
for (int i = 0; i < KeyDouble.Length; i++ )
FullKeyDouble += KeyDouble[i];
while (l < QuantityKeyColor)
{
PixelColor = bmp1.GetPixel(k, 1);
KeyColor = Convert.ToString(PixelColor.R, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
KeyColor = KeyColor.Remove(7, 1);
KeyColor = KeyColor + FullKeyDouble.Substring(0, 1);
FullKeyDouble = FullKeyDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(KeyColor, 2);
bmp1.SetPixel(k, 1, Color.FromArgb(255, ColorInt, PixelColor.G, PixelColor.B));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 1);
l++;
if (l == QuantityKeyColor)
break;
KeyColor = Convert.ToString(PixelColor.G, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
KeyColor = KeyColor.Remove(7, 1);
KeyColor = KeyColor + FullKeyDouble.Substring(0, 1);
FullKeyDouble = FullKeyDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(KeyColor, 2);
bmp1.SetPixel(k, 1, Color.FromArgb(255, PixelColor.R, ColorInt, PixelColor.B));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 1);
l++;
if (l == QuantityKeyColor)
break;
KeyColor = Convert.ToString(PixelColor.B, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
KeyColor = KeyColor.Remove(7, 1);
KeyColor = KeyColor + FullKeyDouble.Substring(0, 1);
FullKeyDouble = FullKeyDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(KeyColor, 2);
bmp1.SetPixel(k, 1, Color.FromArgb(255, PixelColor.R, PixelColor.G, ColorInt));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 1);
l++;
if (l == QuantityKeyColor)
break;
k++;
}
//КОНЕЦ РАБОТЫ С КЛЮЧЕМ
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:29   #5
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

//НАЧАЛО РАБОТЫ С ДЛИНОЙ СООБЩЕНИЯ
int LengthMessage = textBox2.Text.Length;
string LengthMessageDouble = Convert.ToString(LengthMessage, 2);
while (LengthMessageDouble.Length != 8)
{
LengthMessageDouble = "0" + LengthMessageDouble;
}
k = 0;
l = 0;
string MessageColor = "";
while (l < 8)
{
PixelColor = bmp1.GetPixel(k, 2);
MessageColor = Convert.ToString(PixelColor.R, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
MessageColor = MessageColor.Remove(7, 1);
MessageColor = MessageColor + LengthMessageDouble.Substring(0, 1);
LengthMessageDouble = LengthMessageDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(MessageColor, 2);
bmp1.SetPixel(k, 2, Color.FromArgb(255, ColorInt, PixelColor.G, PixelColor.B));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 2);
l++;
if (l == 8)
break;
MessageColor = Convert.ToString(PixelColor.G, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
MessageColor = MessageColor.Remove(7, 1);
MessageColor = MessageColor + LengthMessageDouble.Substring(0, 1);
LengthMessageDouble = LengthMessageDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(MessageColor, 2);
bmp1.SetPixel(k, 2, Color.FromArgb(255, PixelColor.R, ColorInt, PixelColor.B));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 2);
l++;
if (l == 8)
break;
MessageColor = Convert.ToString(PixelColor.B, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
MessageColor = MessageColor.Remove(7, 1);
MessageColor = MessageColor + LengthMessageDouble.Substring(0, 1);
LengthMessageDouble = LengthMessageDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(MessageColor, 2);
bmp1.SetPixel(k, 2, Color.FromArgb(255, PixelColor.R, PixelColor.G, ColorInt));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 2);
l++;
if (l == 8)
break;
k++;
}
//КОНЕЦ РАБОТЫ С ДЛИНОЙ СООБЩЕНИЯ

//НАЧАЛО РАБОТЫ С СООБЩЕНИЕМ
byte[] Message = Encoding.ASCII.GetBytes(textBox2.Te xt);
string[] MessageDouble = new string[Message.Length];
for (int i = 0; i < Message.Length; i++)
{
MessageDouble[i] = Convert.ToString(Message[i], 2).ToString();
while (MessageDouble[i].Length != 8)
{
MessageDouble[i] = "0" + MessageDouble[i];
}
}
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:29   #6
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

int QuantityMessageColor = textBox2.Text.Length * 8;
k = 0;
l = 0;
MessageColor = "";
string FullMessageDouble = "";
for (int i = 0; i < MessageDouble.Length; i++)
FullMessageDouble += MessageDouble[i];
while (l < QuantityMessageColor)
{
PixelColor = bmp1.GetPixel(k, 3);
MessageColor = Convert.ToString(PixelColor.R, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
MessageColor = MessageColor.Remove(7, 1);
MessageColor = MessageColor + FullMessageDouble.Substring(0, 1);
FullMessageDouble = FullMessageDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(MessageColor, 2);
bmp1.SetPixel(k, 3, Color.FromArgb(255, ColorInt, PixelColor.G, PixelColor.B));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 3);
l++;
if (l == QuantityMessageColor)
break;
MessageColor = Convert.ToString(PixelColor.G, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
MessageColor = MessageColor.Remove(7, 1);
MessageColor = MessageColor + FullMessageDouble.Substring(0, 1);
FullMessageDouble = FullMessageDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(MessageColor, 2);
bmp1.SetPixel(k, 3, Color.FromArgb(255, PixelColor.R, ColorInt, PixelColor.B));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 3);
l++;
if (l == QuantityMessageColor)
break;
MessageColor = Convert.ToString(PixelColor.B, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
MessageColor = MessageColor.Remove(7, 1);
MessageColor = MessageColor + FullMessageDouble.Substring(0, 1);
FullMessageDouble = FullMessageDouble.Remove(0, 1);
ColorInt = Convert.ToInt16(MessageColor, 2);
bmp1.SetPixel(k, 3, Color.FromArgb(255, PixelColor.R, PixelColor.G, ColorInt));
pictureBox1.Image = bmp1;
PixelColor = bmp1.GetPixel(k, 3);
l++;
if (l == QuantityMessageColor)
break;
k++;
}
//КОНЕЦ РАБОТЫ С СООБЩЕНИЕМ

MessageBox.Show("Запись в изображение прошла успешно!!!");
}
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:31   #7
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

private void button3_Click(object sender, EventArgs e)
{
bool flag = false;
//ПРОВЕРКА РАБОТЫ С ДЛИНОЙ КЛЮЧА
Bitmap bmp1 = new Bitmap(pictureBox1.Image);
Color PixelColor;
int k = 0;
int l = 0;
string KeyColor = "", LengthKeyDouble = "";
int LengthKey;
while (l < 8)
{
PixelColor = bmp1.GetPixel(k, 0);
KeyColor = Convert.ToString(PixelColor.R, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
LengthKeyDouble += KeyColor.Substring(7, 1);
l++;
if (l == 8)
break;
KeyColor = Convert.ToString(PixelColor.G, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
LengthKeyDouble += KeyColor.Substring(7, 1);
l++;
if (l == 8)
break;
KeyColor = Convert.ToString(PixelColor.B, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
LengthKeyDouble += KeyColor.Substring(7, 1);
l++;
if (l == 8)
break;
k++;
}
LengthKey = Convert.ToInt32(LengthKeyDouble, 2);
//КОНЕЦ ПРОВЕРКИ РАБОТЫ С ДЛИНОЙ КЛЮЧА

//НАЧАЛО ПРОВЕРКИ РАБОТЫ С КЛЮЧЕМ
string FullKeyDouble = "";
int QuantityKeyColor = LengthKey * 8;
k = 0;
l = 0;
while (l < QuantityKeyColor)
{
PixelColor = bmp1.GetPixel(k, 1);
KeyColor = Convert.ToString(PixelColor.R, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
FullKeyDouble += KeyColor.Substring(7, 1);
l++;
if (l == QuantityKeyColor)
break;
KeyColor = Convert.ToString(PixelColor.G, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
FullKeyDouble += KeyColor.Substring(7, 1);
l++;
if (l == QuantityKeyColor)
break;
KeyColor = Convert.ToString(PixelColor.B, 2).ToString();
while (KeyColor.Length != 8)
KeyColor = "0" + KeyColor;
FullKeyDouble += KeyColor.Substring(7, 1);
l++;
if (l == QuantityKeyColor)
break;
k++;
}
string[] KeyDouble = new string[LengthKey];
int[] KeyInt = new int[LengthKey];
char[] KeyChars = new char[LengthKey];
byte[] KeyByte = new byte[LengthKey];
string Key = "";
for (int i = 0; i < LengthKey; i++)
{
KeyDouble[i] = FullKeyDouble.Substring(0, 8);
KeyInt[i] = Convert.ToInt32(KeyDouble[i], 2);
KeyByte[i] = Convert.ToByte(KeyInt[i]);
FullKeyDouble = FullKeyDouble.Remove(0, 8);
}
KeyChars = System.Text.Encoding.ASCII.GetChars (KeyByte);
for (int i = 0; i < LengthKey; i++)
{
Key += KeyChars[i];
}
//КОНЕЦ ПРОВЕРКИ РАБОТЫ С КЛЮЧЕМ
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:31   #8
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

//НАЧАЛО ПРОВЕРКИ РАБОТЫ С ДЛИНОЙ СООБЩЕНИЯ
k = 0;
l = 0;
string MessageColor = "", LengthMessageDouble = "";
int LengthMessage;
while (l < 8)
{
PixelColor = bmp1.GetPixel(k, 2);
MessageColor = Convert.ToString(PixelColor.R, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
LengthMessageDouble += MessageColor.Substring(7, 1);
l++;
if (l == 8)
break;
PixelColor = bmp1.GetPixel(k, 2);
MessageColor = Convert.ToString(PixelColor.G, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
LengthMessageDouble += MessageColor.Substring(7, 1);
l++;
if (l == 8)
break;
PixelColor = bmp1.GetPixel(k, 2);
MessageColor = Convert.ToString(PixelColor.B, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
LengthMessageDouble += MessageColor.Substring(7, 1);
l++;
if (l == 8)
break;
k++;
}
LengthMessage = Convert.ToInt32(LengthMessageDouble , 2);
//КОНЕЦ ПРОВЕРКИ РАБОТЫ С ДЛИНОЙ СООБЩЕНИЯ
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:31   #9
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

//НАЧАЛО ПРОВЕРКИ РАБОТЫ С СООБЩЕНИЕМ
string FullMessageDouble = "";
int QuantityMessageColor = LengthMessage * 8;
k = 0;
l = 0;
while (l < QuantityMessageColor)
{
PixelColor = bmp1.GetPixel(k, 3);
MessageColor = Convert.ToString(PixelColor.R, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
FullMessageDouble += MessageColor.Substring(7, 1);
l++;
if (l == QuantityMessageColor)
break;
MessageColor = Convert.ToString(PixelColor.G, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
FullMessageDouble += MessageColor.Substring(7, 1);
l++;
if (l == QuantityMessageColor)
break;
MessageColor = Convert.ToString(PixelColor.B, 2).ToString();
while (MessageColor.Length != 8)
MessageColor = "0" + MessageColor;
FullMessageDouble += MessageColor.Substring(7, 1);
l++;
if (l == QuantityMessageColor)
break;
k++;
}
string[] MessageDouble = new string[LengthMessage];
int[] MessageInt = new int[LengthMessage];
char[] MessageChars = new char[LengthMessage];
byte[] MessageByte = new byte[LengthMessage];
string Message = "";
for (int i = 0; i < LengthMessage; i++)
{
MessageDouble[i] = FullMessageDouble.Substring(0, 8);
MessageInt[i] = Convert.ToInt32(MessageDouble[i], 2);
MessageByte[i] = Convert.ToByte(MessageInt[i]);
FullMessageDouble = FullMessageDouble.Remove(0, 8);
}
MessageChars = System.Text.Encoding.ASCII.GetChars (MessageByte);
for (int i = 0; i < LengthMessage; i++)
{
Message += MessageChars[i];
}
//КОНЕЦ ПРОВЕРКИ РАБОТЫ С СООБЩЕНИЕМ
if (Key == textBox3.Text)
flag = true;
if (flag)
{
textBox6.Text += "Длина ключа = " + LengthKey.ToString() + (char)13 + (char)10;
textBox6.Text += "Ключ = " + Key + (char)13 + (char)10;
textBox6.Text += "Длина сообщения = " + LengthMessage.ToString() + (char)13 + (char)10;
textBox6.Text += "Сообщение = " + Message + (char)13 + (char)10;
}
else
MessageBox.Show("Ключ введён неправильно");

}
}
}
Strachey вне форума Ответить с цитированием
Старый 09.03.2015, 23:34   #10
Strachey
Пользователь
 
Регистрация: 09.03.2015
Сообщений: 10
По умолчанию

http://rghost.ru/7CrcPKn6N
вот проект))
а то затупил немного))
Strachey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наложить BMP на BMP. sergeyrulit Общие вопросы Delphi 6 05.03.2015 13:41
Конвертор *.bmp to *.bmp z768 Мультимедиа в Delphi 14 28.10.2014 21:11
с++, .BMP Lavandil Общие вопросы C/C++ 10 26.11.2012 13:00
bmp Ципихович Эндрю Свободное общение 10 01.04.2012 20:55
Загрузка BMP в Simple Graph и сохранение в BMP формат artemavd Общие вопросы Delphi 10 02.10.2010 14:19