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

时间:2009-12-02 09:31:15

标签: 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.
   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 个答案:

答案 0 :(得分:2)

错误信息非常明确 - 您正在调用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 :(得分:1)

您从Color.FromArgb()致电GetPixelAtCursor()

由于某种原因,(至少)蓝色成分的值为负值。

最好向我们展示一些相关的代码。

答案 2 :(得分:0)

对我来说似乎很顺利,-1正在传递给CheckByte方法,名称为“blue”,它不喜欢它。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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