Я пытаюсь выполнить некоторую обработку изображений с помощью C #, у меня есть изображение в pictureBox1 и еще одно pictureBox2. Я загрузил исходное изображение без серой шкалы в первый PictureBox, а затем поместил обработчик событий кнопки для обработки Bitmap в изображении внутри этого кадра до серой шкалы, а затем отобразил результат обработки во втором PictureBox. Когда я нажимаю кнопку, возникает исключение типа ArgumentOutOfRangeException: Parameter must be positive and < Width. (Parameter 'x'). Код внутри обработчика кнопки приведен ниже.

//get the graysale representation of this image and assign
            Bitmap mymap= new Bitmap(image_path);
            //Rectangle myrect= new Rectangle(0,0,mymap.Width,mymap.Height);
            Bitmap newmap=new Bitmap(mymap.Height,mymap.Width,mymap.PixelFormat);
            Color p;
            for(int y = 0; y < mymap.Height; y++)
            {
                for(int x = 0; x < mymap.Width; x++)
                {
                    p=mymap.GetPixel(x,y);
                    //get the opacity of this color
                    int a=p.A;
                    //get the red component of this pixel
                    int r = p.R;
                    //get the green component of this pixel
                    int g = p.G;
                    //get the blue component of this pixel
                    int b = p.B;
                    //get the average of these colors which is the gray scale
                    int av=(b+g+r)/ 3;
                    //assign to the new Bitmap
                    newmap.SetPixel(x,y,Color.FromArgb(a,av,av,av));
                }
            }
            //assign to pictureBox 2
          pictureBox2.Image=newmap;

Что я делаю не так?

3
KINYUA TIMOTHY NJIRU 27 Ноя 2021 в 09:05
Примечание; это будет довольно медленно, разблокировка и блокировка для каждого пикселя. См. stackoverflow.com/questions/ 1563038 /…
 – 
Caius Jard
27 Ноя 2021 в 10:31

1 ответ

Лучший ответ

Измените это:

Bitmap(mymap.Height,mymap.Width,mymap.PixelFormat);

К этому:

Bitmap(mymap.Width,mymap.Height,mymap.PixelFormat);

Конструктор растрового изображения ожидает параметры: Width, Height, PixelFormat

2
Andy 27 Ноя 2021 в 09:19
1
Да, код требует внимания, это была ошибка. Спасибо.
 – 
KINYUA TIMOTHY NJIRU
27 Ноя 2021 в 09:24
Привет, код работал, но размер изображения в pictureBox2, где оттенки серого очень мал, вы можете проверить и посоветовать, пожалуйста
 – 
KINYUA TIMOTHY NJIRU
27 Ноя 2021 в 09:30
 – 
KINYUA TIMOTHY NJIRU
27 Ноя 2021 в 09:33
- Попробуйте поиграть со свойством SizeMode в PictureBox
 – 
Andy
27 Ноя 2021 в 09:55
@did, все режимы, stretch, normal тот же результат
 – 
KINYUA TIMOTHY NJIRU
27 Ноя 2021 в 10:13