Я загружаю изображение в консольное приложение, используя Image.FromFile
.
После этого я преобразую его в Bitmap
, чтобы можно было использовать метод Bitmap.GetPixel()
.Удивительно, но при прохождении через все пиксели все, что я получаю от GetPixel
, составляет 0,0,0 для R, G, B.
Чтобы убедиться, что изображение хорошо читается из файла, я добавил ссылку на System.Windows.Forms
и загрузил изображение в PictureBox
, чтобы увидеть результат, и изображение хорошо видно.
Исходное изображение:
Вот как я загружаю изображение и показываю его в PictureBox
:
Bitmap img = (Bitmap)Image.FromFile("image.png");
PictureBox pb = new PictureBox
{
Image = img
};
Form frm = new Form
{
Controls = { pb }
};
frm.ShowDialog();
Который показывает изображение как оно есть:
И после этого я получаю пиксели как:
byte[] input = new byte[784];
for (int x = 0; x < 28; x++)
{
for (int y = 0; y < 28; y++)
{
Color color = img.GetPixel(x, y);
byte r = color.R;
byte g = color.G;
byte b = color.B;
Console.Write($"{color.R},{color.G},{color.B}|||");
input[x * 28 + y] = (byte)((((r + g + b) / 3)));
}
Console.WriteLine();
}
Обратите внимание, что размер изображения составляет 28x28 пикселей, и я пробовал другие изображения, и я получил тот же результат.
То, что я ожидал, что результаты показывают реальные значения цвета, так как я использовал этот методраньше и все работало отлично, но теперь все результаты, выводимые на консоль, представляют собой нули, которые мне трудно понять.
Редактировать:
Поскольку PictureBox
показывает реальное представление изображения, я попытался получить пиксели от PictureBox.Image
, например:
Color color = ((Bitmap)pb.Image).GetPixel(x, y);
Это также не сработало, и результаты вернулись в нули.
Что может быть причиной этого и как это исправить?