У меня есть картинка, где я хочу сохранить сообщение (изменяя последний значащий бит каждого необходимого пикселя).Я использую растровое изображение для загрузки пикселей в список.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string oEcrypt;
private string oDecrypt;
private List<ARGB> toCipherList = new List<ARGB>();
private int Width;
private int Height;
private void button1_Click(object sender, EventArgs e)
{
// here i'm editing toCipherList
Bitmap img = new Bitmap(Width, Height);
for (int i = 0; i < img.Width; i++)
{
for (int j = 0; j < img.Height; j++)
{
Color pixel = Color.FromArgb(toCipherList[i].A, toCipherList[i].R, toCipherList[i].G, toCipherList[i].B);
img.SetPixel(i, j, pixel);
}
}
img.Save("output.jpg");
}
private void button3_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
oEcrypt = openFileDialog1.FileName;
textBox3.Text = oEcrypt;
Bitmap img = new Bitmap(oEcrypt);
Width = img.Width;
Height = img.Height;
for (int i = 0; i < img.Width; i++)
{
for (int j = 0; j < img.Height; j++)
{
Color pixel = img.GetPixel(i, j);
byte A = pixel.A;
byte R = pixel.R;
byte G = pixel.G;
byte B = pixel.B;
ARGB rGB = new ARGB(A, R, G, B);
toCipherList.Add(rGB);
}
}
}
public class ARGB
{
public byte A { get; set; }
public byte R { get; set; }
public byte G { get; set; }
public byte B { get; set; }
public ARGB(byte a, byte r, byte g, byte b)
{
this.A = a;
this.R = r;
this.G = g;
this.B = b;
}
}
Дело в том, что даже если я не изменяю пиксели, просто создайте новое растровое изображение с пикселями, полученными из исходного изображения.Я получаю выходное изображение с некоторыми случайными вертикальными линиями.Я проверил значения, хранящиеся в списке, они совпадают с исходным изображением, когда оно было загружено.Нужно ли мне копировать больше информации?Я пробовал метод GetCopyOf из здесь , но он мне не помог, или я сделал что-то не так.