0

我有一个 PictureBox 控件。当我单击控件上的图像时,事件处理程序被触发。

这是事件处理程序:

Private Sub pbImageHolder_Click(ByVal sender As Object, _
                                ByVal e As EventArgs) Handles pbImageHolder.Click

  Dim clickPoint As Point = MousePosition
  Dim img As Bitmap = New Bitmap(pbImageHolder.Image)
  pixelColor = img.GetPixel(clickPoint.X, clickPoint.Y)

  For i As Integer = 0 To img.Width
    For j As Integer = 0 To img.Height

    Next
  Next
End Sub

问题是我进入了这一行:

 pixelColor = img.GetPixel(clickPoint.X, clickPoint.Y)

这是一个例外:

System.ArgumentOutOfRangeException 未处理
消息=参数必须为正且 < 宽度。

参数名称:x
ParamName=x
Source=System.Drawing

知道如何修复代码吗?

4

2 回答 2

1

假设 SizeMode 是默认的 Normal (参见下面 Hans 的评论),MouseClick 事件将是一个更适合处理而不是单击的事件,因为它会为您传递鼠标位置。

此外,您需要检查该点是否在图像的范围内。

Private Sub pbImageHolder_MouseClick(ByVal sender As Object, _
                                     ByVal e As MouseEventArgs) _
                                     Handles pbImageHolder.MouseClick

  Using img As Bitmap = New Bitmap(pbImageHolder.Image)
    If New Rectangle(Point.Empty, img.Size).Contains(e.Location) Then
      pixelColor = img.GetPixel(e.Location.X, e.Location.Y)
      For i As Integer = 0 To img.Width - 1
        For j As Integer = 0 To img.Height - 1

        Next
      Next
    End If
  End Using
End Sub

对于循环,确保比宽度和高度小一。

除非您不知道范围,否则您不需要 Try - Catch 来处理此错误,但在这种情况下,您知道范围与图像的大小相关。

于 2012-08-01T20:45:34.560 回答
0

防御性编程(测试空值和超出范围的变量值)和使用适当的 try/catch 块的组合(如果你的防御策略“失败”,你想尝试“修复”它,你甚至可以异常本身)catchArgumentOutOfRangeException

于 2012-08-01T20:46:36.340 回答