У меня есть приложение Windows Forms, которое делает снимок экрана определенной части экрана, а затем отображает его в графическом окне (pictureBox1).Это работает, когда я не пытаюсь преобразовать его, но я хочу преобразовать изображение в оттенки серого или черно-белое изображение.Проблема в том, что когда я конвертирую его в оттенки серого, он по-прежнему показывает исходное изображение в графическом окне.
![Here is a picture, how the application looks when it runs properly](https://i.stack.imgur.com/h8BNz.png)
Вот код, когда он работает, без преобразования:
private void button1_Click(object sender, EventArgs e)
{
Rectangle rectangle = new Rectangle(660, 200, 600, 100);
pictureBox1.Height = rectangle.Height;
pictureBox1.Width = rectangle.Width;
imageUploader(rectangle);
}
public void imageUploader(Rectangle rectangle)
{
Bitmap bitmap = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format32bppArgb);
Graphics graphics = Graphics.FromImage(bitmap);
graphics.CopyFromScreen(rectangle.Left, rectangle.Top, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);
bitmap.Save("proba.jpeg", ImageFormat.Jpeg);
pictureBox1.Image = bitmap;
}
Вот метод преобразования, который я опробовал:
public void toGrayscale(Bitmap bitmap)
{
Color c;
for (int y = 0; y < bitmap.Height; y++)
{
for (int x = 0; x < bitmap.Width; x++)
{
c = bitmap.GetPixel(x,y);
Color newColor = Color.FromArgb(c.R,0,0);
bitmap.SetPixel(x,y,newColor);
}
}
}
После того, как я использовал это преобразование (см. Ниже), изображение появилось в окне изображения, но оно не былооттенки серого.
Вот модифицированное изображение vUploader void с преобразованием:
public void imageUploader(Rectangle rectangle)
{
Bitmap bitmap = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format32bppArgb);
toGrayscale(bitmap);
Graphics graphics = Graphics.FromImage(bitmap);
graphics.CopyFromScreen(rectangle.Left, rectangle.Top, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);
bitmap.Save("proba.jpeg", ImageFormat.Jpeg);
pictureBox1.Image = bitmap;
}