C#软件调试问题中的错误消息

C#软件调试问题中的错误消息,c#,debugging,C#,Debugging,当我试图在创建中运行程序时,我遇到了这个错误,我应该如何解释错误消息,宏在许多循环中运行得很好,但突然中断,产生了这个错误 ************** 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.

当我试图在创建中运行程序时,我遇到了这个错误,我应该如何解释错误消息,宏在许多循环中运行得很好,但突然中断,产生了这个错误

************** 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);
    }

对我来说,这似乎很难理解,-1被传递给CheckByte方法,名称为“blue”,但它不喜欢它


确保您没有将负值传递给函数

我觉得这很难理解,-1被传递给CheckByte方法,名称为“blue”,它不喜欢它


确保没有将负值传递给函数

错误消息相当清楚-您正在调用,但您给它的“蓝色”值为-1,这是无效的。从文档中:

蓝色
类型:System.Int32
蓝色 新颜色的组件值。 有效值为0到255

如何解决这个问题取决于您的代码试图做什么

编辑:好的,既然您已经发布了代码,我强烈怀疑它返回了CLR_INVALID,我猜这是-1的位模式(即所有位集)。你只是在移动它,它被符号延伸,所以你仍然得到-1

很容易避免这种情况导致异常-只需以屏蔽其他值的相同方式屏蔽蓝色值:

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

然而,这实际上只是隐藏了问题——在没有有效值的情况下,最终会出现白色。您应该检查
color==-1
,并采取适当的行动。同样,确切的行为将取决于您的应用程序。

错误消息相当清楚-您正在调用,但您给它的“蓝色”值为-1,这是无效的。从文档中:

蓝色
类型:System.Int32
蓝色 新颜色的组件值。 有效值为0到255

如何解决这个问题取决于您的代码试图做什么

编辑:好的,既然您已经发布了代码,我强烈怀疑它返回了CLR_INVALID,我猜这是-1的位模式(即所有位集)。你只是在移动它,它被符号延伸,所以你仍然得到-1

很容易避免这种情况导致异常-只需以屏蔽其他值的相同方式屏蔽蓝色值:

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

然而,这实际上只是隐藏了问题——在没有有效值的情况下,最终会出现白色。您应该检查
color==-1
,并采取适当的行动。同样,确切的行为将取决于您的应用程序。

您是否在操纵某些元素/控件的颜色?RGB集合的蓝色值超出了0到255的可接受范围。

您是否在操纵某些元素/控件的颜色?RGB集合的蓝色值超出了0到255的可接受范围。

您正在尝试使用
color.FromArgb
创建颜色,并将-1传递给蓝色参数,这是一个非法值。

您正在尝试使用
color.FromArgb
创建颜色,并将-1传递给蓝色参数,这是一个非法值。

您可以从
GetPixelAtCursor()
调用
Color.FromArgb()

出于某种原因,蓝色组件(至少)的值为负值


最好在这一点上向我们展示一些相关的代码

GetPixelAtCursor()
调用
Color.FromArgb()

出于某种原因,蓝色组件(至少)的值为负值


最好在这一点上向我们展示一些相关的代码

也许可以用对Color.FromArgb(int-argb)的调用替换该函数调用。另外,在调用前检查-1。文档:感谢您的帮助,我将根据您的信息尝试修复此问题。也许可以将该函数调用替换为对Color.FromArgb(int-argb)的调用。另外,在调用前检查-1。文档:感谢您的帮助,我将根据您的信息尝试修复此问题。