argb

Blitz3D Forums/Blitz3D Programming/argb

D4NM4N(Posted 2005) [#1]
can someone tell me the formula for calculating ARGB for writepixel?


splinux(Posted 2005) [#2]
sure.
this returns the argb from r, g and b values:
Function ARGB(R%, G%, B%)
 Local res = B + G * 256 + R * 256 * 256
 Return res
End Function


and, if you want, there are also these functions:
Function Red(RGB)
 Local res = RGB / (256 * 256) + 256
 Return res
End Function

Function Green(RGB)
 Local res = (RGB Mod (256 * 256)) / 256 + 256
 Return res
End Function

Function Blue(RGB)
 Local res = (RGB Mod (256 * 256)) Mod 256 + 256
 Return res
End Function


these functions returns an integer value.


D4NM4N(Posted 2005) [#3]
Thanks :)


jfk EO-11110(Posted 2005) [#4]
You may also use bitshift operations, I don't know if they're faster, but in theory they should be:

rgb=readpixelfast(x,y) and $FFFFFF
r=(rgb shr 16) and $FF
g=(rgb shr 8) and $FF
b= rgb and $FF

and the other way:

argb= (alpha shl 24) or (r shl 16) or (g shl 8) or b


Hotcakes(Posted 2005) [#5]
I'm under the impression that if a power of 2 is involved, then Blitz is clever enough to optimise that to a bitshift automagically.


big10p(Posted 2005) [#6]
Possibly, but I like to make as few assumptions about the itelligence of the compiler as possible, myself. I may be being too "oldskool" here, but I still consider jfk's way as being better.

Having said that, both ways still only work in 32-/24-bit modes. What if D-Grafix is using a 16-bit mode? :P