Получение пиксела с экрана и исключение ArgumentOutOfRangeException - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, решил сделать бота. Вот кусок кода, в котором после запуска вылетает исключение ArgumentOutOfRangeException:
private void Timer_Tick(Object sender, EventArgs e)
        {
            screenPicture = null;
            CountTick+=1;
            if (CountTick < 40)
            {
                screenPicture = new Bitmap(500, 435);
                using (Graphics g = Graphics.FromImage(screenPicture))
                {
                    g.CopyFromScreen(400, 130, 0, 0, screenPicture.Size);
                }
                Bitmap after = screenPicture; 
                for (int j = 131; j < 565; j += 3)
                {
                    for (int i = 401; i < 900; i += 3)
                    {
                        if (screenPicture.GetPixel(i, j) != Color.FromArgb(255, 0, 0, 0))
                        {
                            Point ptTarget = new Point(i, j);
                            Cursor.Position = ptTarget;
                            MouseClick();
                        }
                    }
                }
            }
            else this.Close();
        }
Пишет: "Параметр должен быть положительным и меньше ширины. Имя параметра: x" в строке if (screenPicture.GetPixel(i, j) != Color.FromArgb(255, 0, 0, 0)) Весь день сидел писал, так что сейчас голова просто не варит... Отладчик показывает, что i=500, j=131, не пойму в чем проблема

Решение задачи: «Получение пиксела с экрана и исключение ArgumentOutOfRangeException»

textual
Листинг программы
private void Timer_Tick(Object sender, EventArgs e)
        {
            screenPicture = null;
            CountTick+=1;
            if (CountTick < 20)
            {
            //    screenPicture = new Bitmap(500, 435);
                screenPicture = new Bitmap(900, 565);
                using (Graphics g = Graphics.FromImage(screenPicture))
                {
                    g.CopyFromScreen(400, 130, 0, 0, screenPicture.Size);
                }
                Bitmap after = screenPicture; 
                for (int j = 130; j < 565; j += 5)
                {
                    for (int i = 400; i < 900; i += 5)
                    {
                        if (after.GetPixel(i, j) != Color.FromArgb(255, 0, 0, 0))
                        {
                            Point ptTarget = new Point(i, j);
                            Cursor.Position = ptTarget;
                            MouseClick();
                        }
                    }
                }
            }
            else this.Close();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы