webForumDet fria alternativet
Logga in / Bli medlem

RGB() i VB, för JS?

JavaScript

4 svar · 205 visningar · startad av Brimba

Medlem sedan dec. 19995 874 inlägg
Trådstart#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?

Medlem sedan juni 20004 308 inlägg
#2

Så här...

function RGB(r,g,b){ return (r+g*256+b*65536); }
Medlem sedan dec. 19995 874 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?

Medlem 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å ;)

Medlem 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.

248 ms totalt · 4 externa anrop · v20260731065814-full.81e7e81c
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)