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
YAL bugfix
Blitz3D Forums/Blitz3D Programming/YAL bugfixThe forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.