I have a color in the form of 0xFFFFFF, and I want it to fade a %, for example, 50%(0xFFFFFF)=0x808080 (divided by 2, each pair)
What is the math formulae? :)
Separate them into the color components, divide by two and join them up again :-)
Hint: ASR, ASL, bAND, bOR
Let us know if you want more hints :-)
I need :P
No problem, have a look at this post:
http://www.glbasic.com/forum/index.php?topic=1637.msg11177#msg11177
Here's my colour brightness routine:
// colour_new = Colour_Brightness(colour, 25) // new colour 25% brighter
// colour_new = Colour_Brightness(colour, -50) // new colour 50% darker
FUNCTION Colour_Brightness%: colour%, increase%
LOCAL r%, g%, b%, percent#
percent = increase / 100.0
r=bAND(colour,0xff)
g=bAND(colour/0x100,0xff)
b=bAND(colour/0x10000,0xff)
//a=bAND(colour/0x1000000,0xff)
IF percent >= 0
r = INTEGER((255 - r) * percent + r)
g = INTEGER((255 - g) * percent + g)
b = INTEGER((255 - b) * percent + b)
ELSE
r = INTEGER(r * ABS(-1 - percent))
g = INTEGER(g * ABS(-1 - percent))
b = INTEGER(b * ABS(-1 - percent))
ENDIF
RETURN RGB(r, g, b)
ENDFUNCTION
Or, here's a colour TYPE I created (but rarely use, seemed a bit 'overkill'!):
TYPE TColour
colour%
FUNCTION Set%: r%, g%, b%
self.colour = RGB(r, g, b)
ENDFUNCTION
FUNCTION Red%:
RETURN bAND(self.colour, 0xff)
ENDFUNCTION
FUNCTION Green%:
RETURN bAND(self.colour/0x100, 0xff)
ENDFUNCTION
FUNCTION Blue%:
RETURN bAND(self.colour/0x10000, 0xff)
ENDFUNCTION
FUNCTION Alpha%:
RETURN bAND(self.colour/0x1000000, 0xff)
ENDFUNCTION
FUNCTION Brightness%: amount%
LOCAL r%, g%, b%, percent#
percent = amount / 100.0
r = self.Red()
g = self.Green()
b = self.Blue()
IF percent >= 0
r = INTEGER((255 - r) * percent + r)
g = INTEGER((255 - g) * percent + g)
b = INTEGER((255 - b) * percent + b)
ELSE
r = INTEGER(r * ABS(-1 - percent))
g = INTEGER(g * ABS(-1 - percent))
b = INTEGER(b * ABS(-1 - percent))
ENDIF
RETURN RGB(r, g, b)
ENDFUNCTION
ENDTYPE
// Usage:
LOCAL colour AS TColour
colour.Set(255,0,128)
// or colour.colour = RGB(255,0,128)
colour = colour.Brightness(50) // Increase brightness 50%
DEBUG "The BLUE portion: " + colour.Blue() + "\n"
Just in case two working solutions aren't enough, here is another less elegant for shameless pride: http://www.glbasic.com/forum/index.php?topic=5624.msg (http://www.glbasic.com/forum/index.php?topic=5624.msg) Change brightness, colour and saturation of a sprite. :P