[AS3] Hex naar RGB

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Wij zijn op school bezig met een project waarbij we met de webcam iemands emotie aflezen.
Dit gebeurt allemaal in AS3

Nu hebben we er een Arduino aan gekoppeld die aan de hand van de emotie een 3 color LED aanstuurd.
Dus bijvoorbeeld als je boos bent is die rood en als je blij bent blauw.

Het enige wat we nu nog moeten doen is de Hex kleur naar RGB omzetten en doorsturen naar de LED.

Hier staan de kleuren die gebruikt worden bij de emoties:

(ik zag geen AS3 tag dus even JS gebruikt)
JavaScript:
1
2
3
4
5
6
var happyKleuren:Array = ["090230", "162D22", "020D19", "282635", "064411"];
var sadKleuren:Array = ["D2E1F7", "CAF3FF", "91EBED", "279393", "B9EAE9"];
var angryKleuren:Array = ["990499", "600453", "B28AAF", "AA3F87", "7C0E5D"];
var suprisedKleuren:Array = ["3EFF55", "00FF00", "FFA300", "F9FF00", "FFD400"];
var ambientKleuren:Array = ["224172", "728287", "1E3838", "B9B9BA", "4E6D6B"];
var kleur:String = "00FF00";


Hieronder bevat "kleur" een Hex getal,
hoe krijg ik dit omgezet naar de RGB code?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//verander licht
function changeColor(emotie):void{
    //kies kleur
    var randomNumber2:int = Math.round(Math.random() * (5 - 0)) + 0;

    switch (emotie) {
        case "happy":
                         //  "kleur" hieronder bevat dus een Hex getal dat naar RGB moet
            kleur = happyKleuren[randomNumber2];
            
            ledState9=0;   // hier moet ipv de "0" de RGB code
            ledState10=0;  // hier moet ipv de "0" de RGB code
            ledState11=0;  // hier moet ipv de "0" de RGB code
            
        break;
            
        case "sad":
            kleur = sadKleuren[randomNumber2];
                        
            ledState9=0;   // hier moet ipv de "0" de RGB code
            ledState10=0;  // hier moet ipv de "0" de RGB code
            ledState11=0;  // hier moet ipv de "0" de RGB code
            
        break;
            
        case "suprised":
            kleur = suprisedKleuren[randomNumber2];
                        
            ledState9=0;   // hier moet ipv de "0" de RGB code
            ledState10=0;  // hier moet ipv de "0" de RGB code
            ledState11=0;  // hier moet ipv de "0" de RGB code
            
        break;
        
        case "angry":
            kleur = angryKleuren[randomNumber2];
                        
            ledState9=0;   // hier moet ipv de "0" de RGB code
            ledState10=0;  // hier moet ipv de "0" de RGB code
            ledState11=0;  // hier moet ipv de "0" de RGB code
            
        break;
                    
        case "ambient":
            kleur = ambientKleuren[randomNumber2];
                        
            ledState9=0;   // hier moet ipv de "0" de RGB code
            ledState10=0;  // hier moet ipv de "0" de RGB code
            ledState11=0;  // hier moet ipv de "0" de RGB code
            
        break;
            
        default:
            kleur = ambientKleuren[randomNumber2];
    }
    
    //interface aanpassen
    var doorstuurKleur = "0x" + kleur;
    var tintEffect:Color = new Color();
    tintEffect.setTint(doorstuurKleur, 1);
    hoofdMenu.kleurMonitor.transform.colorTransform = tintEffect;
    //arduino.writeDigitalPin(ledPin9, ledState9);
    arduino.writeAnalogPin(ledPin9, ledState9);
    arduino.writeAnalogPin(ledPin10, ledState10);
    arduino.writeAnalogPin(ledPin11, ledState11);
    colorToFile()
}


Wij komen er echt niet uit.

Alvast bedankt voor de hulp,
Maxcim

Acties:
  • 0 Henk 'm!

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 11-09 12:48

ThunderNet

Flits!

Hex = de RGB kleur.. Alleen in een hexidecimale notatie.

Eerste 2 tekens R, 2e set, G, 3e set B

dan heb je 2 tekens in hexidecimale notatie per kleurkanaal
16^2 = 2^8 = 256.

Enige wat je dus hoeft te doen is je hexadecimale notatie om te zetten naar 24 bits binair notatie.. eerste 8 bits is je rood kanaal, tweede 8 bits je groen, laatste 8 bits je blauw.. simpeler kan niet?

[ Voor 36% gewijzigd door ThunderNet op 10-02-2010 15:54 ]

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


Acties:
  • 0 Henk 'm!

Verwijderd

Ik google op "hex to rgb" en kom meteen op

http://www.javascripter.net/faq/hextorgb.htm

Misschien dat je daar iets aan hebt :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 10 februari 2010 @ 15:54:
Ik google op "hex to rgb" en kom meteen op

http://www.javascripter.net/faq/hextorgb.htm

Misschien dat je daar iets aan hebt :)
De kleur is telkens anders, en we willen nog meer kleuren toevoegen.
Dus hij moet zelf berekenen wat de RGB waarde is. :)

Acties:
  • 0 Henk 'm!

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 11-09 12:48

ThunderNet

Flits!

Verwijderd schreef op woensdag 10 februari 2010 @ 15:55:
[...]


De kleur is telkens anders, en we willen nog meer kleuren toevoegen.
Dus hij moet zelf berekenen wat de RGB waarde is.
er hoeft niks berekend te worden.. je notatie hoeft alleen omgezet te worden.

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ThunderNet schreef op woensdag 10 februari 2010 @ 15:56:
[...]

er hoeft niks berekend te worden.. je notatie hoeft alleen omgezet te worden.
Ja sorry dat bedoel ik.

Maar we komen er gewoon niet uit. Het wil ons maar niet lukken om de code goed te krijgen.
Kan iemand ons misschien op de goede weg helpen?

Bedankt :)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

Verwijderd schreef op woensdag 10 februari 2010 @ 15:50:
JavaScript:
1
2
3
4
5
6
7
8
9
10
        case "happy":
                         //  "kleur" hieronder bevat dus een Hex getal dat naar RGB moet
            kleur = happyKleuren[randomNumber2];
            
            ledState9=0;   // hier moet ipv de "0" de RGB code
            ledState10=0;  // hier moet ipv de "0" de RGB code
            ledState11=0;  // hier moet ipv de "0" de RGB code
            
        break;
        // en zo nog vijf..
Dit stukje kan je overigens ook nog wel verbeteren. Om 6 keer dezelfde code in je switch te hebben is nou niet denderend handig voor onderhoud :P
Verwijderd schreef op woensdag 10 februari 2010 @ 15:58:
Maar we komen er gewoon niet uit. Het wil ons maar niet lukken om de code goed te krijgen.
Kan iemand ons misschien op de goede weg helpen?
Die dus. Wat lukt daar niet aan?

[ Voor 28% gewijzigd door MueR op 10-02-2010 16:01 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Hex is een notatie. Of je nou 184 schrijft of #B8; beide is hetzelfde. Bij RGB in deze notatie waar je op doelt is het dus #RRGGBB waarbij de eerste 2 digits dus voor R staan, 2 voor G en 2 voor B. In 2 digits kun je 00 t/m FF noteren. Dat is decimaal 0 t/m 255.

Verder moet je er wel uit komen

(Overigens is (A)RGB weer gewoon een notatie voor 3 (en 4 als je A meeneemt) bytes dus je kunt de 'losse' RGB waarden ook interpreteren als 1 3-bytes-groot (of 4 als je A meeneemt) type. Neem je A mee dan krijg je gewoon een 32 bits getal. Zie ook Getallen en talstelsels FAQ

Oh: Waar hoort mijn topic?
PRG >> WEB

[ Voor 39% gewijzigd door RobIII op 10-02-2010 16:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ath92
  • Registratie: Augustus 2007
  • Laatst online: 03-05 10:34
Mensen, wat doen we moeilijk hier!

code:
1
uint("0x"+happyKleuren[1])


Dit werkt ook gewoon, omdat kleuren in AS3 kunnen worden geschreven als 0xFFFFFF (uint), dus als je een string maakt met exact die waarde en die vervolgens omzet in uint werkt je script zonder problemen.

Verwijderd

Topicstarter
Ik heb de oplossing al gekregen op een ander forum.

code:
1
2
3
ledState9 =  happyKleuren[randomNumber2] >> 16 & 0xFF;
ledState10 =  happyKleuren[randomNumber2] >> 8 & 0xFF;
ledState11 =  happyKleuren[randomNumber2] & 0xFF;


Toch bedankt,
Grtz Maxcim

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23:10

Janoz

Moderator Devschuur®

!litemod

Euhm die oplossing is al gegeven in de allereerste reactie van je post. Het enige dat je op het andere forum gekregen hebt is een daadwerkelijke implementatie middels bitshifting en een bitwize and.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Alfredo
  • Registratie: Maart 2007
  • Laatst online: 31-07 19:40
Als je kleuren geen alfa waarde gedefinieerd hebben, is de bitwise AND niet nodig voor de rode kleur. Groen en blauw vallen gewoon weg door de shift.
Pagina: 1