У меня есть выбор цвета, который я использую на картинке с MouseMove
, а не Click
, чтобы цвет отображался «на лету», однако, когда я покидаю границы изображение, я получаю сообщение об ошибке и не могу придумать, как лучше справиться с этим.Динамический выбор цвета в vb.net
Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
If isWithin(DirectCast(sender, PictureBox), New Point(e.X, e.Y)) And e.Button = Windows.Forms.MouseButtons.Left Then
Dim bmptmp As New Bitmap(Me.PictureBox1.Image, Me.PictureBox1.Width, Me.PictureBox1.Height)
Dim clrtmp As Color = bmptmp.GetPixel(e.X, e.Y) '<--- error here
...
...
End If
End Sub
Я написал функцию isWithin
и добавить его к If
выше, как один из возможных способов проверки, но это не кажется, работает:
Public Function isWithin(pic As PictureBox, pnt As Point)
Dim rct1 As New Rectangle(pic.Top, pic.Left, pic.Width, pic.Height)
Dim rct2 As New Rectangle(pnt.X - 1, pnt.Y - 1, 1, 1)
Return rct1.IntersectsWith(rct2)
End Function
Ошибка Я получаю это
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Drawing.dll - Additional information: Parameter must be positive and < Height
(или < Width
если я зашел слишком далеко вправо). Я предполагаю, что это потому, что либо e.X
или e.Y
больше не либо больше 0 или меньше, чем высота или ширина (что я пытался проверить с помощью функции isWithin
)
может быть приятно узнать, какую * ошибку вы получаете. у вас могут быть другие люди на горизонте, поскольку там есть некоторые ресурсы, которые могут быть неправильно уничтожены. – Plutonix
@Plutonix Ах да, заново запомнится, чтобы получить ошибку. Поскольку я решил это уже, я забыл включить его в конце сообщения – bmgh1985
@Plutonix добавил, что сообщение об ошибке теперь – bmgh1985