webForumDet fria alternativet

RGB() i VB, för JS?

4 svar · 205 visningar · startad av Brimba

BrimbaMedlem sedan dec. 19995 875 inlägg
#1

Hej!

I VB exmeplevis finns en funktion som heter RGB()

Om man exempelvis skriver RGB(255, 50, 80) får man värdet 5255935. Någon som vet om det finns någon liknande funktion i JS, alternativt vet hur man räknar ut färgvärdet?

JojoxxMedlem sedan juni 20004 308 inlägg
#2

Så här...

function RGB(r,g,b){ return (r+g*256+b*65536); }
BrimbaMedlem sedan dec. 19995 875 inlägg
#3

Kan du även förklara eller ge någon länk där någon förklarar varför formeln ser ut sådär?

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Det är en vanlig hexadecimal -> decimal omvandling. Det värde som står först (255, FF hex) är den minst värda byten. Sen kommer 50 (32 hex) och sist 80 (50 hex) som är värd mest. Hexadecimalt blir det alltså;

5032FF

vilket blir 5255935 decimalt. Den minst värda byten är alltså värt 1, nästa byte är värd 256 (100 hex) och nästa 65536 (10000 hex).

Det blir inte enklare än så ;)

spangoMedlem sedan juni 20008 205 inlägg
#5

Man kan även använda bitskiftning, för att göra det hela mer illustrativt (och dessutom ser det ballare ut) :

function rgb(r, g, b){
    return r | (g << 8) | (b << 16);
}

Då sammanfogas (med |-operatorn, BITWISE OR) värdet för r med värdet för g, skyfflat 8 steg (dvs en byte) åt vänster, och värdet för b, skyfflat 16 steg (två byte) åt vänster. Kolla exempelvis det här:

var red = 0,
green = 0,
blue = parseInt("11111111", 2); // binärt värde, blir 255 decimalt
alert( rgb(red, green, blue).toString(2) );

Voila, de åtta första bitarna (== de som flyttats 16 steg till vänster, == blått) har värdet ett, och de övriga har värdet noll.

127 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)