| Private Sub TransformImage(ByVal from_picture As _
    PictureBox, ByVal to_picture As PictureBox, ByVal _
    to_color As OLE_COLOR, ByVal target_mostly As _
    MostlyEnum)
Dim bitmap_info As BITMAPINFO
Dim pixels() As Byte
Dim bytes_per_scanLine As Integer
Dim pad_per_scanLine As Integer
Dim X As Integer
Dim Y As Integer
Dim pixel_mostly As MostlyEnum
Dim to_red As Byte
Dim to_green As Byte
Dim to_blue As Byte
    ' Prepare the bitmap description.
    With bitmap_info.bmiHeader
        .biSize = 40
        .biWidth = from_picture.ScaleWidth
        ' Use negative height to scan top-down.
        .biHeight = -from_picture.ScaleHeight
        .biPlanes = 1
        .biBitCount = 32
        .biCompression = BI_RGB
        bytes_per_scanLine = ((((.biWidth * .biBitCount) + _
            31) \ 32) * 4)
        pad_per_scanLine = bytes_per_scanLine - (((.biWidth _
            _
            * .biBitCount) + 7) \ 8)
        .biSizeImage = bytes_per_scanLine * Abs(.biHeight)
    End With
    ' Load the bitmap's data.
    ReDim pixels(1 To 4, 1 To from_picture.ScaleWidth, 1 To _
        _
        from_picture.ScaleHeight)
    GetDIBits from_picture.hdc, from_picture.Image, _
        0, from_picture.ScaleHeight, pixels(1, 1, 1), _
        bitmap_info, DIB_RGB_COLORS
    ' Get to_color's red, green, and blue components.
    UnRGB to_color, to_red, to_green, to_blue
    ' Modify the pixels.
    For Y = 1 To from_picture.ScaleHeight
        For X = 1 To from_picture.ScaleWidth
            ' See if this pixel is mostly
            ' red, green, or blue.
            If pixels(pixR, X, Y) > pixels(pixG, X, Y) And _
               pixels(pixR, X, Y) > pixels(pixB, X, Y) _
            Then
                pixel_mostly = mostly_Red
            ElseIf pixels(pixG, X, Y) > pixels(pixR, X, Y) _
                And _
                   pixels(pixG, X, Y) > pixels(pixB, X, Y) _
            Then
                pixel_mostly = mostly_Green
            ElseIf pixels(pixB, X, Y) > pixels(pixR, X, Y) _
                And _
                   pixels(pixB, X, Y) > pixels(pixG, X, Y) _
            Then
                pixel_mostly = mostly_Blue
            Else
                pixel_mostly = mostly_Tied
            End If
            ' See if this is the target color.
            If pixel_mostly = target_mostly Then
                pixels(pixR, X, Y) = to_red
                pixels(pixG, X, Y) = to_green
                pixels(pixB, X, Y) = to_blue
            End If
        Next X
    Next Y
    ' Display the result.
    SetDIBits to_picture.hdc, to_picture.Image, _
        0, to_picture.ScaleHeight, pixels(1, 1, 1), _
        bitmap_info, DIB_RGB_COLORS
    to_picture.Picture = to_picture.Image
End Sub |