更改像素搜索的区域

时间:2014-04-29 17:14:30

标签: vb.net

我一直在开发一个应用,在某个区域搜索3个像素然后播放声音。它目前有效,但我希望将它从整个屏幕搜索到的区域缩小到我的屏幕上的矩形区域,这是为了节省应用程序的内存使用情况,这里是有效的代码

Private Sub dcdTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dcdTimer.Tick
    Dim screensize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Dim screenshot As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Dim ge As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenshot)
    Dim pointx As Integer = 1
    Dim pointy As Integer = 1

    ge.CopyFromScreen(New Point(0, 0), New Point(0, 0), screensize)
    looking = True



    Try
        While looking = True

            Dim atpoint As Color = screenshot.GetPixel(pointx, pointy)
            Dim reckcol1 As Color = Color.FromArgb(a, r, g, b)      'first pixel colour
            Dim reckcol2 As Color = Color.FromArgb(a1, r1, g1, b1) 'second pixel colour
            Dim reckcol3 As Color = Color.FromArgb(a2, r2, g2, b2) 'third pixel colour

            If atpoint = reckcol1 Then  'Matches 3 pixels
                Dim testPoint As Color = screenshot.GetPixel(pointx, pointy + 10)
                If testPoint = reckcol2 Then
                    Dim testPoint2 As Color = screenshot.GetPixel(pointx + 10, pointy + 10)
                    If testPoint2 = reckcol3 Then

                        My.Computer.Audio.Play(sounddir + "Found.wav")
                        looking = False
                        Sleep(15000)
                        pointx = 0
                        pointy = 0
                    End If
                End If
            End If

            pointy = pointy + 1

            If pointy = My.Computer.Screen.Bounds.Height Then
                pointy = 0
                pointx = pointx + 1

            End If
        End While

    Catch ex As Exception
    End Try
End Sub

我尝试按照建议使用此代码:

    Dim pointofY As New Point(500, 400)
    Dim screensize As New Size(400, 200)
    Dim screenshot As New Rectangle(pointofY, screensize)

    Dim ge As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenshot)

但是,使用矩形不允许我使用getpixel或使用ge.copyfromscreen

0 个答案:

没有答案