GetHistogram example for Access 95 and 97

The following code does a CMYK separation and uses a histogram to find the brightest and darkest intensities in the K plane of the bitmap. It then remaps the intensities to use the full range and merges the color planes to recreate the bitmap:

' Declare local variables
Dim MyIndex, Brightest, Darkest, CurrentRange, Offset

DoCmd.Hourglass True

'Do a CMYK color separation and copy the K plane to the bitmap
Lead1.ColorSeparate COLORSEP_CMYK
Lead1.Bitmap = Lead1.ColorPlanes(3) 'Copy the K plane

'Load the histogram
Lead1.GetHistogram CHANNEL_MASTER

'Find the brightest and darkest intensities in the image
MyIndex = 0
Brightest = 0
Darkest = -1
While (MyIndex < 256)
    If Lead1.HistogramTable(MyIndex) > 0 Then
        Brightest = MyIndex
        If (Darkest = -1) Then
            Darkest = MyIndex
        End If
    End If
    MyIndex = MyIndex + 1
Wend

'Remap the intensities to use the full range
MyIndex = Darkest
CurrentRange = Brightest - Darkest
If CurrentRange > 0 Then
    While (MyIndex <= Brightest)
        Offset = MyIndex - Darkest
        Lead1.RemapTable(MyIndex) = (255 * Offset) / CurrentRange
        MyIndex = MyIndex + 1
    Wend
    Lead1.RemapIntensity CHANNEL_MASTER
End If

'Merge the color planes and free them from memory
Lead1.ColorPlanes(3) = Lead1.Bitmap 'Update the K plane
Lead1.ColorMerge COLORSEP_CMYK
Lead1.ColorPlanes(0) = 0
Lead1.ColorPlanes(1) = 0
Lead1.ColorPlanes(2) = 0
Lead1.ColorPlanes(3) = 0

'Set the image display size to match the LEAD control
Lead1.SetDstRect 0, 0, Lead1.ScaleWidth, Lead1.ScaleHeight
Lead1.SetDstClipRect 0, 0, Lead1.ScaleWidth, Lead1.ScaleHeight
Lead1.ForceRepaint
DoCmd.Hourglass False