Dividing hex FFFFFF

Previous topic - Next topic

ampos

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? :)

Moru

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 :-)

ampos


Moru


Slydog

Here's my colour brightness routine:
Code (glbasic) Select
// 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'!):
Code (glbasic) Select
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"
My current project (WIP) :: TwistedMaze <<  [Updated: 2015-11-25]

Wampus

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 Change brightness, colour and saturation of a sprite.  :P