Avatar billede donslund Nybegynder
23. december 2004 - 10:16 Der er 13 kommentarer og
1 løsning

Fra RGB-værdi til Hex

Er der en måde at konvertere fra 255,0,0 til 0xff0000?
Avatar billede sw_red_6 Nybegynder
23. december 2004 - 10:17 #1
øhh, konvertere i hvad?
Avatar billede donslund Nybegynder
23. december 2004 - 10:23 #2
Ja, altså. Hvis jeg har en farve der er udregnet til ex. 255,0,0. For at jeg kan bruge den i Flash skal jeg vel have formatet 0xff0000. Hvordan klarer jeg det?
Avatar billede sw_red_6 Nybegynder
23. december 2004 - 10:29 #3
øh, vil du have at det skal konverteres automatisk, for så skal du vidst selv skrive et program eller funktion som gør det, men hvis du bare vil vide hex værdien så kan du bruge windows calculator i scientific mode den kan konvertere fra decimaltal til hex
Avatar billede thulstrup Nybegynder
23. december 2004 - 10:35 #4
Prøv sådan her:

rgbToHex = function (r, g, b) {
    r = r.toString(16);
    g = g.toString(16);
    b = b.toString(16);
    r = r.length<2 ? "0"+r : r;
    g = g.length<2 ? "0"+g : g;
    b = b.length<2 ? "0"+b : b;
    return "0x"+(r+g+b).toUpperCase();
};
trace(rgbToHex(255, 0, 0));
Avatar billede thulstrup Nybegynder
23. december 2004 - 10:40 #5
Egentlig burde man vel lave det retunerede fra funktionen om til et nummer, altså:

return Number("0x"+(r+g+b).toUpperCase());

Den vil så ikke ikke trace 0xff0000, men 16711680. Resultatet er dog det samme.
Avatar billede donslund Nybegynder
23. december 2004 - 11:20 #6
Smid et et svar Thulstrup. Det virker jo efter hensigten.
Avatar billede thulstrup Nybegynder
23. december 2004 - 11:32 #7
Ok
Avatar billede barklund Nybegynder
25. december 2004 - 13:35 #8
Skulle man aldrig gøre det "rigtigt" og tænke lidt mere matematisk og knap så script-hackset?

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

--
Morten Barklund ;)
Avatar billede donslund Nybegynder
26. december 2004 - 11:11 #9
Hej Barklund.

Det er jo altid bedst at gøre tingene rigtigst. Gide du bruge et par minutter på at forklare hvad det er du har skrevet?
Avatar billede mat Nybegynder
26. december 2004 - 12:46 #10
Der er en kort forklaring her: http://actionscript-toolbox.com/bitoperators.php - så kan barklund evt uddybe :)
Avatar billede barklund Nybegynder
28. december 2004 - 00:45 #11
Tal er tal. Uanset om jeg skriver:

0xFF
255
0377

Så bliver det under alle omstændigheder til tallet 255. Hvis jeg skriver:

0xFF + 0xFF00

Så får jeg selvfølgelig:

0xFFFF

Ligesom hvis jeg skrev:

99 + 9900 = 9999

Så hvordan kan jeg få tre tal i den decimale base som for eksempel:

25,77,94

Til at blive til:

257794?

Jo, ved at gange den første med 10000, den anden med 100 og lægge dem sammen:

25 * 10000 + 77 * 100 + 94 = 250000 + 7700 + 94 = 257794

Hvis jeg skal få:

0xFF,0xAA,0x55

Til at blive til

0xFFAA55

Så skal jeg altså gange de to tal tilsvarende. Og hvilke tal var 10000 og 100 i ovenstående? Netop basens (10) opløftet til antallet af 0'er efter. 100 = 10^2, 10000=10^4. Tilsvarende skal hex tal ganges med 16^4 (kan skrives som 0x10000) og 16^2 (kan skrives som 0x100):

0xFF * 0x10000 + 0xAA * 0x100 + 0x55 = 0xFFAA55

At gange med ting, som 2 går op i (2 går op i 16, 2 går altså op i 16^n for ethvert n tilhører Z) så kan de skrives med << operatoren. At gange med 16^n er at gange med 2^(4*n), altså:

0xFF * 16^4 = 0xFF * 2^16 = 0xFF << 16

Samlet får vi:


0xFF << 16 + 0xAA << 8 + 0x55 = 0xFFAA55

Og netop fordi ovennævnte tal ganges, så de ikke har overlappende bits (orker jeg ikke lige at forklare ;)), så kan addition laves via binær OR:

0xFF << 16 | 0xAA << 8 | 0x55 = 0xFFAA55

Og selvom vores input tal ikke er beskrevne som ovenstående hextal, vil resultatet selvfølgelig være det samme:

255 << 16 | 170 << 8 | 85 = 0xFFAA55 = 16755285

Tal er tal. Hex-tal er bare en notationsform, som kan være meget praktisk nogle gange, ligesom decimal-tal kan være praktiske.

Hm, dette kvalificerer vist for en lille artikel ;)

--
Morten Barklund
Avatar billede mat Nybegynder
29. december 2004 - 12:23 #12
jada, smid det i en artikel, så er det nemt at finde igen (og linke til) - jeg betaler gerne en rund e-femmer for den :)
Avatar billede thulstrup Nybegynder
29. december 2004 - 12:58 #13
Enig, det er da lige til en artikel.

Btw det er rart at blive sat på plads på så lærerig en måde :o)
Avatar billede barklund Nybegynder
31. december 2004 - 12:44 #14
Ja, nu har jeg jo netop lavet mit geniale artikel-redigeringssystem færdigt, så jeg har netop oprettet den som:

http://actionscript.dk/artikler/?a=18

Jeg synes den er fiin :)

(og sitet er snart klart til brug :))

--
Morten Barklund
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester