Code archives/Graphics/Contrast Adjuster

This code has been declared by its author to be Public Domain code.

Download source code

Contrast Adjuster by Pete Rigz2004
This simple bit of code will take an image and adjust its contrast based on the contrast value and threshold u pass it.

I made it to make my procedural colour maps abit more vibrant.

You'll need your own graphic for the example to work.
;----------Quick test of adjust contrast function
Graphics3D 800,600,0,2

SetBuffer FrontBuffer()

test=LoadImage("grass.png")
test2=LoadImage("grass.png")

DrawImage test,5,5

DrawImage adjustcontrast(test,50,32),275,5
DrawImage adjustcontrast(test2,-50,64),5,275

WaitKey()

;-----------

Function AdjustContrast(image,level#,threshold#=64)

	;Contrast adjuster by Peter Rigby

	;set the level to a value between -100 to 100

	;threshold is a colour value between 0-255. Contrast works by exaggerating
	;the colour depending on which side of the threshold it is.

	Local pixel#
	Local red#,green#,blue#
	Local r,g,b
	Local pix

	LockBuffer ImageBuffer(image)

	Local contrast#=(100+level)/100	;set up the contrast to a value between 0-4
	contrast=contrast*contrast
	
	threshold=threshold/255.0		;normalise the threshold


	
	For x = 0 To ImageWidth(image)-1
		For y = 0 To ImageHeight(image)-1
		
			pix = ReadPixelFast(X,Y,ImageBuffer(image))	
			red#=(pix Shr 16) And $ff			;extract the colour values
			green#=(pix Shr 8) And $ff
			blue#=pix And $ff
			
			pixel = red/255.0					;for each colour, set to a value between 0-1
			pixel=pixel-threshold				;take away the threshold
			pixel=pixel*contrast				;if the pixel colour becomes negative then the colour will become darker, otherwise it'll lighten
			pixel=pixel+threshold				;add the threshold back again
			pixel=pixel*255						;convert back to noram colour value
			If pixel < 0 Then pixel = 0		;deal with abnormal colour values
			If pixel > 255 Then pixel = 255
			r=pixel
												;repeat for the other 2 colours
			pixel = green/255.0
			pixel=pixel-threshold
			pixel=pixel*contrast
			pixel=pixel+threshold
			pixel=pixel*255
			If pixel < 0 Then pixel = 0
			If pixel > 255 Then pixel = 255
			g=pixel
			
			pixel = blue/255.0
			pixel=pixel-threshold
			pixel=pixel*contrast
			pixel=pixel+threshold
			pixel=pixel*255
			If pixel < 0 Then pixel = 0
			If pixel > 255 Then pixel = 255
			b=pixel
			
			pix=(b Or (g Shl 8) Or (r Shl 16) Or ($ff000000))
			WritePixelFast x,y,pix,ImageBuffer(image)	;write pixel to image
	   Next
	Next
	UnlockBuffer ImageBuffer(image)
	Return image
End Function

Comments

None.

Code Archives Forum