Источником проблемы, вероятно, является то, что Color.Black равно , а не равно Color.FromArgb (0, 0, 0) .
Решением, вероятно, будет изменение строки:
if (imgToDecode.GetPixel(m, k) == Color.Black)
до:
if (imgToDecode.GetPixel(m, k) == Color.FromArgb(0, 0, 0))
или даже лучше, объявите переменную, содержащую цвет (0,0,0), и затем используйте ее в этом if выражении.
Так что сделайте что-то вроде:
Color black = Color.FromArgb(0, 0, 0);
в начале вашего метода и затем измените , если на:
if (imgToDecode.GetPixel(m, k) == black)
UPDATE:
Казалось, есть некоторые незначительные проблемы с начальными значениями циклов. Я обновил ваш код.
public Bitmap imgToDecode;
private void button2_Click(object sender, EventArgs e)
{
textBox2.Text = "";
Color black = Color.FromArgb(0, 0, 0);
int i = (imgToDecode.Height * imgToDecode.Width);
bool[] pixData = new bool[i];
int p = 0;
for (int k = 0; k < imgToDecode.Height; k++)
{
for (int m = 0; m < imgToDecode.Width; m++)
{
pixData[p] = (imgToDecode.GetPixel(m, k) == black);
p++;
}
}
for (int n = 0; n < pixData.Length; n++)
{
textBox2.Text = (textBox2.Text + (Convert.ToInt32(pixData[n])));
}
}
Если вам не нужен массив pixData , содержащий значения bool , вы можете изменить его на int и назначить 1 или 0. Таким образом, вы не можете не нужно конвертировать позже:).