Сообщение об ошибке в вопросе отладки программного обеспечения C # - PullRequest
0 голосов
/ 02 декабря 2009

Я получаю эту ошибку, когда пытаюсь запустить программу при создании, как бы я ни вставлял сообщение об ошибке, макрос работает отлично для многих циклов, но затем просто неожиданно прерывается, выдавая эту ошибку.

************** Exception Text **************
System.ArgumentException: Value of '-1' is not valid for 'blue'. 'blue' should be greater than or equal to 0 and less than or equal to 255.
   at System.Drawing.Color.CheckByte(Int32 value, String name)
   at System.Drawing.Color.FromArgb(Int32 alpha, Int32 red, Int32 green, Int32 blue)
   at System.Drawing.Color.FromArgb(Int32 red, Int32 green, Int32 blue)
   at Dispatcher_Tool.ColorCheck.GetPixelAtCursor()
   at Dispatcher_Tool.ColorCheck.getPixel()
   at Dispatcher_Tool.ColorCheck.checkColorBlack(Int32 blackCordsX, Int32 blackCordsY)
   at Dispatcher_Tool.main_normal.checkColor()
   at Dispatcher_Tool.main_normal.startMacro(TextBox valX)
   at Dispatcher_Tool.main_normal.button5_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

код вокруг этой точки,

    [DllImport("gdi32")]
    private static extern int GetPixel(IntPtr hdc, int x, int y);
    [DllImport("User32")]
    private static extern IntPtr GetWindowDC(IntPtr hwnd);



    #region Pixel color test

    private static readonly IntPtr DesktopDC = GetWindowDC(IntPtr.Zero);

    public static System.Drawing.Color GetPixelAtCursor()
    {
        System.Drawing.Point p = Cursor.Position;
        int color = GetPixel(DesktopDC, p.X, p.Y);
        return System.Drawing.Color.FromArgb(color & 0xFF, color >> 8 & 0xFF, color >> 16);
    }

Ответы [ 5 ]

2 голосов
/ 02 декабря 2009

Сообщение об ошибке довольно ясно - вы звоните Color.FromArgb, но вы даете ему "синее" значение -1, что недопустимо. Из документов:

синий
Тип: System.Int32
Синий значение компонента для нового цвета. Допустимые значения: от 0 до 255.

То, как вы это исправите, будет зависеть от того, что пытается сделать ваш код.

РЕДАКТИРОВАТЬ: Хорошо, теперь, когда вы разместили код, я сильно подозреваю, что он возвращает CLR_INVALID, который, как я предполагаю, - это битовый шаблон для -1 (то есть все биты установлены). Вы просто сдвигаете это, что расширяется до знака, поэтому вы все еще получаете -1. ​​

Очень легко избежать этого, вызывая исключение - просто замаскируйте синее значение так же, как вы маскируете остальные:

return Color.FromArgb(color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF);

Тем не менее, это на самом деле просто собирается скрыть проблему - в итоге вы получите белый, где на самом деле у вас нет действительного значения. Возможно, вы должны проверить, если color == -1 и действовать соответствующим образом. Опять же, это точное поведение будет зависеть от вашего приложения.

1 голос
/ 02 декабря 2009

Вы звоните Color.FromArgb() с GetPixelAtCursor().

По какой-то причине у вас есть отрицательное значение (по крайней мере) для синего компонента.

Лучше покажите нам часть соответствующего кода на этом этапе.

0 голосов
/ 02 декабря 2009

Вы пытаетесь создать цвет, используя Color.FromArgb и передавая -1 синему параметру, что является недопустимым значением.

0 голосов
/ 02 декабря 2009

Вы манипулируете цветом определенного элемента / элемента управления? Значение синего цвета набора RGB выпало из допустимого диапазона от 0 до 255.

0 голосов
/ 02 декабря 2009

Мне кажется, это довольно прямолинейно, -1 передается методу CheckByte с именем "blue", и ему это не нравится.

Убедитесь, что вы не передаете отрицательные значения своей функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...