Finding black and white images I am looking to speed up the search for black and white images. I have about 150,000 images that I need to check but this is taking so long. How can I speed up the code?

Private Sub BlackOrWhite()    
    Dim iPath As String = txtFile1.Text
    Dim allFiles() As String = IO.Directory.GetFiles(iPath, "*.*", IO.SearchOption.TopDirectoryOnly)
    For Each eachPic In allFiles
        Dim myImage As Bitmap = New Bitmap(eachPic, True)
        Dim myColor As Color = CalculateColorKey(myImage)
        myImage.Dispose()

        If GetRgbDelta(myColor) = 0 Then
            IO.File.Move(eachPic, iPath &amp; "Delete\" &amp; IO.Path.GetFileName(eachPic))
        End If
    Next
End Sub

Public Shared Function CalculateColorKey(bmp As Bitmap) As Color
    Try
        Dim keyColor As Color = Color.Empty
        Dim highestRgbDelta As Integer = 0

        For x As Integer = 0 To CInt((bmp.Width / 2))
            For y As Integer = 0 To CInt(bmp.Height / 2)
                If GetRgbDelta(bmp.GetPixel(x, y)) &lt;= highestRgbDelta Then
                    Continue For
                End If

                highestRgbDelta = GetRgbDelta(bmp.GetPixel(x, y))
                keyColor = bmp.GetPixel(x, y)
            Next
        Next

        Return keyColor
    Catch ex As Exception
        Debug.Print("CalculateColorKey: " &amp; ex.Message)
    End Try
End Function

Private Shared Function GetRgbDelta(color As Color) As Integer
    GetRgbDelta = 100
    Try
        Dim aaa As Integer = Math.Abs(CInt(color.R) - CInt(color.G))
        Dim bbb As Integer = Math.Abs(CInt(color.G) - CInt(color.B))
        Dim ccc As Integer = Math.Abs(CInt(color.B) - CInt(color.R))
        Return aaa + bbb + ccc
    Catch ex As Exception
        Debug.Print("GetRgbDelta: " &amp; ex.Message)
    End Try
End Function
Your code should have a function IsGrayscale(bmp as Bitmap) as Boolean. It should look like this:

Function IsGrayscale(bmp as Bitmap) as Boolean
    For x As Integer = 0 To bmp.Width - 1 Do
        For y As Integer = 0 To bmp.Height - 1 Do
          If Not IsGrayscalePixel(bmp.GetPixel(x, y)) Then
              Return False
          End If
        End For
    End For
    Return True
End Function

Function IsGrayscalePixel(col as Color) as Boolean
    Return col.R = col.G and col.G = col.B
End Function


At least this is what I think your program should do, based on your description. You don't need the concept of a "color key" to check whether an image is grayscale or not.

The main point is that the function returns as soon as it has found a colored pixel, since then there is no point in checking the rest of the image.

Note that I don't know Visual Basic well, so there might be syntax errors in the above code. So focus more on the ideas than one the grammar.