Colour Cycling
BlitzPlus Forums/BlitzPlus Programming/Colour Cycling| 
 | ||
| Can anybody help me create a nice looking colour cycle? I am trying to create a nice smooth cycle through all the colours of the rainbow and loop it repeatedly. Any help\ideas would be great. Jason. | 
| 
 | ||
| You basically have to make a loop, and continuously change the rgb numbers, and the just draw a rectangle with the current color. Ex: Red 255,0,0 Red Orange 255,100,0 Yellow Orange 255,200,0 Yellow 255,255,0 Lime Yellow 200,255,0 Yellow Green 100,255,0 Green 0,255,0 Turqouise 0,255,100 Aqua 0,200,200 Greenish Blue 0,100,255 Blue 0,0,255 Blue Violet 100,0,255 Violet 200,0,200 Red Violet 255,0,100 Red 255,0,0 And so on. These aren't the exact colors of the Rainbow, because the rainbow uses Magenta, Cyan and Yellow as the base colors, while the computer uses RGB. So you will have to work out exactly how to do this, but here is a start, hopefully. | 
| 
 | ||
| can you please explain more what kind of colour cycling you wan't to achieve? is this a one color changing to all the rainbow colors or all the rainbow colors cycling cycling from one to another red to orange orange to yellow etc... but you still have all the colors onscreen but at different place ? | 
| 
 | ||
| I want one colour to slowly change from red to orange, orange to yellow etc... but it must fade between the colours slowly not a sharp full red to full orange effect but a more subtle fading between colours. Jason. | 
| 
 | ||
| ok this is something like that you probly wan't 
Graphics 800,600,32,3
Restore colo
Read r1,g1,b1,blah
Read r2,g2,b2,nb
st=0
Repeat
	st=st+1
	col$=gradient(r1,g1,b1,r2,g2,b2,nb,st)
	Color Mid(col$,1,3),Mid(col$,4,3),Mid(col$,7,3)
	Rect 0,0,800,600
	Flip
	If st=nb
		r1=r2
		g1=g2
		b1=b2
		st=0
		Read r2,g2,b2,nb
		If r2=999 And g2=999 And b2=999
			Restore colo	
			Read r2,g2,b2,nb
		EndIf
	EndIf
Until KeyDown(1)
WaitKey
End
;---------------data--------------
;r,g,b,steps
;---------------------------------
.Colo
Data 255,0,0,100
Data 255,100,0,100
Data 255,200,0,100
Data 255,255,0,100
Data 200,255,0,100
Data 100,255,0,100
Data 0,255,0,100
Data 0,255,100,100
Data 0,200,200,100
Data 0,100,255,100
Data 0,0,255,100
Data 100,0,255,100
Data 200,0,200,100
Data 255,0,100,100
Data 999,999,999,999 ; end of data
;-------------function gradient-----------
; return a string in format rrr,ggg,bbb
;-----------------------------------------
;
;rs#,gs#,bs# :rgb source
;re#,ge#,be# :rgb destination
;stpg steps for the total transition
;cs current step
;
;
Function gradient$(rs#,gs#,bs#,re#,ge#,be#,stpg,cs)
	If rs#>re#
		vadr#=((rs#-re#)/stpg)*-1.0
	Else
		vadr#=((re#-rs#)/stpg)*1.0
	EndIf
	If rs#>re#
		vadg#=((gs#-ge#)/stpg)*-1.0
	Else
		vadg#=((ge#-gs#)/stpg)*1.0
	EndIf
	If bs#>be#
		vadb#=((bs#-be#)/stpg)*-1.0
	Else
		vadb#=((be#-bs#)/stpg)*1.0
	EndIf
	rs#=rs#+vadr#*cs
	gs#=gs#+vadg#*cs
	bs#=bs#+vadb#*cs
	Return Mid$("000",1,3-Len(Str$(Int(rs#))))+Str$(Int(rs#))+Mid$("000",1,3-Len(Str$(Int(gs#))))+Str$(Int(gs#))+Mid$("000",1,3-Len(Str$(Int(bs#))))+Str$(Int(bs#))
End Function
hope you like :) | 
| 
 | ||
| Thanks to all that helped especially ford escort, that function was exactly what I was after, thanks. Jason. | 
| 
 | ||
| you're welcome :) |