Function LMImageMeasureContrast%(img)
;minvalue = 255
;maxvalue = 0
minvalue_r = 255
minvalue_g = 255
minvalue_b = 255
width = ImageWidth(img)
height = ImageHeight(img)
LockBuffer(ImageBuffer(img))
For y = 0 To height-1
For x = 0 To width-1
rgb1 = ReadPixelFast(x, y, ImageBuffer(img)) And $FFFFFF
r1 = (rgb1 Shr 16 And %11111111)
g1 = (rgb1 Shr 8 And %11111111)
b1 = (rgb1 And %11111111)
; If r1 > maxvalue Then maxvalue = r1
; If g1 > maxvalue Then maxvalue = g1
; If b1 > maxvalue Then maxvalue = b1
; If r1 < minvalue Then minvalue = r1
; If g1 < minvalue Then minvalue = g1
; If b1 < minvalue Then minvalue = b1
; (sswift)
; What you really want to measure is the contrast of each channel, and then select the channel with the
; max contrast. What you're doing above would assume that an image that is pure red has a lot of contrast
; because blue and green are 0 and red is 255.
If r1 > maxvalue_r Then maxvalue_r = r1
If g1 > maxvalue_g Then maxvalue_g = g1
If b1 > maxvalue_b Then maxvalue_b = b1
If r1 < minvalue_r Then minvalue_r = r1
If g1 < minvalue_g Then minvalue_g = g1
If b1 < minvalue_b Then minvalue_b = b1
Next
Next
UnlockBuffer(ImageBuffer(img))
;(sswift)
contrast_r = maxvalue_r - minvalue_r
contrast_g = maxvalue_g - minvalue_g
contrast_b = maxvalue_b - minvalue_b
If (contrast_r > contrast_g) And (contrast_r > contrast_b) Then Return contrast_r
If (contrast_g > contrast_r) And (contrast_g > contrast_b) Then Return contrast_g
Return contrast_b
;Return maxvalue - minvalue
End Function
|