Как работать с отдельными пикселями на изображении - C#
Формулировка задачи:
Плиз помогите как работать с отдельными пикселями на изображении. Если точнее то я использую сетпиксель и гет пиксель, а при сохранении изменённой картинки картинка сохраняется неизменённой подскажите в чём проблема???
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
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)
{
int dlina = textBox2.Text.Length*8;
int dlinapixel = dlina / 3 + 1;
int dlinakey = textBox3.Text.Length * 8;
int dlinakeypixel = dlinakey / 3 + 1;
// textBox4.Text += "dlina=" + dlina.ToString() + (char)13 + (char)10;
// textBox4.Text += "dlinapixel=" + dlinapixel.ToString() + (char)13 + (char)10;
// textBox4.Text += "======================================" + (char)13 + (char)10;
byte[] messagebyte = Encoding.ASCII.GetBytes(textBox2.Text);
// for(int i = 0; i<messagebyte.Length;i++)
// textBox4.Text +="messagebyte["+i+"]= "+ messagebyte[i] + (char)13 + (char)10;
// textBox4.Text += "======================================" + (char)13 + (char)10;
int value;
string message = "";
for (int i = 0; i < messagebyte.Length; i++)
{
value = Convert.ToInt16(messagebyte[i]);
message += Convert.ToString(value, 2)+ " ";
}
// textBox4.Text += "message= " + message + (char)13 + (char)10;
//textBox4.Text += "======================================" + (char)13 + (char)10;
message = message.Trim();
string[] message2 = message.Split(' ');
for (int i = 0; i < message2.Length; i++)
while (message2[i].Length != 8)
message2[i] = "0" + message2[i];
// for (int i = 0; i < message2.Length; i++)
// textBox4.Text += "message2[" + i + "]= " + message2[i] + (char)13 + (char)10;
// textBox4.Text += "======================================" + (char)13 + (char)10;
Color pixelcolor;
Bitmap bmp1 = new Bitmap(pictureBox1.Image);
string[] rmessage = new string[dlinapixel];
string[] gmessage = new string[dlinapixel];
string[] bmessage = new string[dlinapixel];
string[] rkey = new string[dlinakeypixel];
string[] gkey = new string[dlinakeypixel];
string[] bkey = new string[dlinakeypixel];
byte colorr, colorg, colorb, keycolorr, keycolorg, keycolorb;
for (int i = 0; i < dlinapixel; i++)
{
pixelcolor = bmp1.GetPixel(i, 1);
colorr = pixelcolor.R;
colorg = pixelcolor.G;
colorb = pixelcolor.B;
rmessage[i] = Convert.ToString(colorr, 2).ToString();
gmessage[i] = Convert.ToString(colorg, 2).ToString();
bmessage[i] = Convert.ToString(colorb, 2).ToString();
while (rmessage[i].Length != 8)
{
rmessage[i] = "0" + rmessage[i];
}
while (gmessage[i].Length != 8)
{
gmessage[i] = "0" + gmessage[i];
}
while (bmessage[i].Length != 8)
{
bmessage[i] = "0" + bmessage[i];
}
}
for (int i = 0; i < dlinapixel; i++)
{
textBox4.Text += "rmessage[" + i + "]" + " = " + rmessage[i] + (char)13 + (char)10;
textBox4.Text += "gmessage[" + i + "]" + " = " + gmessage[i] + (char)13 + (char)10;
textBox4.Text += "bmessage[" + i + "]" + " = " + bmessage[i] + (char)13 + (char)10;
textBox4.Text += "============================" + (char)13 + (char)10;
}
for (int i = 0; i < dlinakeypixel; i++)
{
pixelcolor = bmp1.GetPixel(i, 0);
keycolorr = pixelcolor.R;
keycolorg = pixelcolor.G;
keycolorb = pixelcolor.B;
rkey[i] = Convert.ToString(keycolorr, 2).ToString();
gkey[i] = Convert.ToString(keycolorg, 2).ToString();
bkey[i] = Convert.ToString(keycolorb, 2).ToString();
while (rkey[i].Length != 8)
{
rkey[i] = "0" + rkey[i];
}
while (gkey[i].Length != 8)
{
gkey[i] = "0" + gkey[i];
}
while (bkey[i].Length != 8)
{
bkey[i] = "0" + bkey[i];
}
}
/* for (int i = 0; i < dlinakeypixel; i++)
{
textBox4.Text += "rkey[" + i + "]" + " = " + rkey[i] + (char)13 + (char)10;
textBox4.Text += "gkey[" + i + "]" + " = " + gkey[i] + (char)13 + (char)10;
textBox4.Text += "bkey[" + i + "]" + " = " + bkey[i] + (char)13 + (char)10;
textBox4.Text += "============================" + (char)13 + (char)10;
}
*/
string keyfull = "";
byte[] key = Encoding.ASCII.GetBytes(textBox3.Text);
for (int i = 0; i < key.Length; i++)
keyfull += Convert.ToString(key[i], 2).ToString() + " ";
keyfull = keyfull.Trim();
string[] key2 = keyfull.Split(' ');
for (int j = 0; j < key2.Length; j++)
{
while (key2[j].Length != 8)
{
key2[j] = "0" + key2[j];
}
// textBox4.Text += "key2[" + j + "]" + " = " + key2[j] + (char)13 + (char)10;
}
// textBox4.Text += "============================" + (char)13 + (char)10;
string fullmessage = "";
string fullkey = "";
string sub = "";
for (int i = 0; i < key2.Length; i++)
fullkey += key2[i];
// textBox6.Text = fullkey;
int k = 0;
while (fullkey.Length>0)
{
rkey[k] = rkey[k].Remove(7, 1);
sub = fullkey.Substring(0, 1);
fullkey = fullkey.Remove(0, 1);
rkey[k] += sub;
if (fullkey.Length == 0)
break;
gkey[k] = gkey[k].Remove(7, 1);
sub = fullkey.Substring(0, 1);
fullkey = fullkey.Remove(0, 1);
gkey[k] += sub;
if (fullkey.Length == 0)
break;
bkey[k] = bkey[k].Remove(7, 1);
sub = fullkey.Substring(0, 1);
fullkey = fullkey.Remove(0, 1);
bkey[k] += sub;
if (fullkey.Length == 0)
break;
k++;
}
/* for (int i = 0; i < dlinakeypixel; i++)
{
textBox5.Text += "rkey[" + i + "]" + " = " + rkey[i] + (char)13 + (char)10;
textBox5.Text += "gkey[" + i + "]" + " = " + gkey[i] + (char)13 + (char)10;
textBox5.Text += "bkey[" + i + "]" + " = " + bkey[i] + (char)13 + (char)10;
textBox5.Text += "============================" + (char)13 + (char)10;
}
*/
for (int i = 0; i < message2.Length; i++)
fullmessage += message2[i];
// textBox6.Text = fullmessage;
k = 0;
while (fullmessage.Length > 0)
{
rmessage[k] = rmessage[k].Remove(7, 1);
sub = fullmessage.Substring(0, 1);
fullmessage = fullmessage.Remove(0, 1);
rmessage[k] += sub;
if (fullmessage.Length == 0)
break;
gmessage[k] = gmessage[k].Remove(7, 1);
sub = fullmessage.Substring(0, 1);
fullmessage = fullmessage.Remove(0, 1);
gmessage[k] += sub;
if (fullmessage.Length == 0)
break;
bmessage[k] = bmessage[k].Remove(7, 1);
sub = fullmessage.Substring(0, 1);
fullmessage = fullmessage.Remove(0, 1);
bmessage[k] += sub;
if (fullmessage.Length == 0)
break;
k++;
}
/* for (int i = 0; i < dlinapixel; i++)
{
textBox5.Text += "rmessage[" + i + "]" + " = " + rmessage[i] + (char)13 + (char)10;
textBox5.Text += "gmessage[" + i + "]" + " = " + gmessage[i] + (char)13 + (char)10;
textBox5.Text += "bmessage[" + i + "]" + " = " + bmessage[i] + (char)13 + (char)10;
textBox5.Text += "============================" + (char)13 + (char)10;
}
*/
//устанавливаю цвет пикселя
bmp1.SetPixel(1, 0, Color.FromArgb(255,0,0,0));
}
private void button3_Click(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile(textBox1.Text);
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);
}
}
}Решение задачи: «Как работать с отдельными пикселями на изображении»
textual
Листинг программы
bmp1.SetPixel(1, 0, Color.FromArgb(255,0,0,0));