-         
Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 63

Thema: Farben nach R,G,B umwandeln in 4-stell. hex-code?

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.341
    Anzeige

    ...danke für die Idee..und, schon getested...?
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  2. #22
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2018
    Beiträge
    368
    Nein, ich habe das von Hand gerechnet. Du hattest ja nur auf dem Rückweg Probleme, mit den Berechnungen, daher denke ich, dass es was mit dem 8 Bit-Gedöhns zu tun hat. Ich habe die Rechnung genau aufgeschlüsselt. Kann man nachvollziehen und überprüfen.

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.341
    leider nein, stimmt immer noch nicht.

    Bitte teste es doch vorher selber, bevor du einen falschen Lösungsweg postest.

    Code:
    uint16_t ColorRGB216bit(uint16_t R, uint16_t G, uint16_t B) {
    
       return  (uint16_t)((R/8)*2048) | (uint16_t)((G/4)*32) | (uint16_t)(B/8);
    }
    
    
    void Color16bit2colorRGB(uint16_t color16, uint16_t &R, uint16_t &G, uint16_t &B) {
    
       R = (uint8_t)(color16 / 2048)*8; ;
       G = (uint8_t)(color16 & 2016)/8;;
       B = (uint8_t)(color16 & 31)*8;
       Serial.println("");
       Serial.println("Unterprogramm color16 zu RGB:");
       Serial.println( (String)"color16="+(String)color16);
       Serial.println( (String)"R="+(String)R);
       Serial.println( (String)"G="+(String)G);
       Serial.println( (String)"B="+(String)B); 
    }
    
    void setup() {
      // put your setup code here, to run once:
    
       uint16_t r=255, g=102, b=78, 
                col16=0;               // 0xFF66B2;  // Dark Pink (255,102,78)
    
    
       Serial.begin(115200);
       delay(3000);
       
       Serial.println("Hauptprogramm vor Aufruf:");
       Serial.println( (String)"col16="+(String)col16);
       Serial.println( (String)"r="+(String)r);
       Serial.println( (String)"g="+(String)g);
       Serial.println( (String)"b="+(String)b);
       Serial.println("");
       
       col16=ColorRGB216bit(r,g,b);
       r=g=b=0; // Rücksetzen!
    
       Serial.println("Hauptprogramm nach rgb zu col16-Berechnung (rgb gelöscht):");
       Serial.println( (String)"col16="+(String)col16);
       Serial.println( (String)"r="+(String)r);
       Serial.println( (String)"g="+(String)g);
       Serial.println( (String)"b="+(String)b);
       
       Color16bit2colorRGB(col16, r, g, b);
       Serial.println("");
       Serial.println("Hauptprogramm nach col16 zu rgb:");
       Serial.println( (String)"col16="+(String)col16);
       Serial.println( (String)"r="+(String)r);
       Serial.println( (String)"g="+(String)g);
       Serial.println( (String)"b="+(String)b);   
        
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
    }
    Code:
    Hauptprogramm vor Aufruf:
    col16=0
    r=255
    g=102
    b=78
    
    Hauptprogramm nach rgb zu col16-Berechnung (rgb gel⸮scht):
    col16=64297
    r=0
    g=0
    b=0
    
    Unterprogramm color16 zu RGB:
    color16=64297
    R=248
    G=4
    B=72
    
    Hauptprogramm nach col16 zu rgb:
    col16=64297
    r=248
    g=4
    b=72
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.745
    Ich habe die Berechnung gerade einmal in einem Excel Blatt angelegt um es verständlich zu machen

    https://puu.sh/BsLSg/6fe9cf4a10.png

    ich liefere später noch etwas code nach, wenn mein kopf sich von dem krampf auf arbeit erholt hat XD

    ich sehe im moment nur miraculi vor augen

    man kann den leichten farbunterschied durch die skallierung von 5 bzw. 6 bit doch besser erkennen als mir lieb ist XD
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #25
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2018
    Beiträge
    368
    HaWe, soll das auf Arduino laufen?

    Nächstes mal komme ich vorbei und haue Dich! Schreibt der Kerl "...bevor du einen falschen Lösungsweg postest". Tse, tse, tse!

    Was hältst Du denn von dieser Ausgabe mit Deinem Programm? Sieht das besser aus? :

    Code:
    Hauptprogramm vor Aufruf:
    col16=0
    r=255
    g=102
    b=78
    
    Hauptprogramm nach rgb zu col16-Berechnung (rgb gelöscht):
    col16=64297
    r=0
    g=0
    b=0
    
    Unterprogramm color16 zu RGB:
    color16=64297
    R=248
    G=100
    B=72
    
    Hauptprogramm nach col16 zu rgb:
    col16=64297
    r=248
    g=100
    b=72
    Geändert von Moppi (10.09.2018 um 18:54 Uhr)

  6. #26
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.341
    da bin ich jetzt gespantn (ich habs noch nicht hingekriegt, evtl was falsch verstanden)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  7. #27
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2018
    Beiträge
    368
    Ich habe doch geschrieben, wo ich denke, dass das Problem liegt. Dass Du die Berechnung auf 8 Bit erzwingst.

    mach bitte so:

    Code:
       
    void Color16bit2colorRGB(uint16_t color16, uint16_t &R, uint16_t &G, uint16_t &B) {
    
       R = (color16 / 2048)*8; ;
       G = (color16 & 2016)/8;;
       B = (color16 & 31)*8;
       Serial.println("");
       Serial.println("Unterprogramm color16 zu RGB:");
       Serial.println( (String)"color16="+(String)color16);
       Serial.println( (String)"R="+(String)R);
       Serial.println( (String)"G="+(String)G);
       Serial.println( (String)"B="+(String)B); 
    }


    Ich hoffe, dass es jetzt besser ist!

  8. #28
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.341
    hatte ich das nicht gemacht?

    R = (uint8_t)(color16 / 2048 )*8; ;
    G = (uint8_t)(color16 & 2016)/8;;
    B = (uint8_t)(color16 & 31)*8;

    ach so, du meinst ich soll das nicht machen?
    Das wäre nicht korrekt, denn es sind ja uint8_t Zahlen, die zurückgegeben werden sollen.
    Probier doch mal bitte selber!
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  9. #29
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2018
    Beiträge
    368
    Ich hatte das hier schon geschrieben (Beirag #20): https://www.roboternetz.de/community...l=1#post646541

    Ich denke, er führt die Berechnung mit 8 Bit aus.
    Code:
    so:  (uint8_t)(color16 / 2048 )*8;
    Du brauchst aber 16 Bit während der Berechnung, weil zumindest Dein Farbwert color16 ja 16 Bit umfasst.

    Du müsstest hinterher eine Umwandlung vornehmen
    Code:
    (uint8_t)R = (color16 / 2048 )*8;
    Aber das funktioniert nicht!

    Deshalb habe ich jetzt das probiert, da gibt es kein Gemecker:
    Code:
    void Color16bit2colorRGB(uint16_t color16, uint16_t &R, uint16_t &G, uint16_t &B) {
    
       R = (color16 / 2048)*8; ;
       G = (color16 & 2016)/8;;
       B = (color16 & 31)*8;
       R = (uint8_t)R;
       G = (uint8_t)G;
       B = (uint8_t)B;
       
       Serial.println("");
       Serial.println("Unterprogramm color16 zu RGB:");
       Serial.println( (String)"color16="+(String)color16);
       Serial.println( (String)"R="+(String)R);
       Serial.println( (String)"G="+(String)G);
       Serial.println( (String)"B="+(String)B); 
    }
    Geändert von Moppi (10.09.2018 um 19:22 Uhr)

  10. #30
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.341
    bittebittebitte mal selber testen!

    - - - Aktualisiert - - -

    ...ach so, jetzt habe ich deinen Einwand verstanden!
    Klammer ums ganze, dann erst casten!

    - - - Aktualisiert - - -

    nein, stimmt auch nicht dann.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte

Ähnliche Themen

  1. String nach Array umwandeln (?)
    Von slavezero im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 07.06.2012, 18:21
  2. Chips die nach Seriell umwandeln
    Von dundee12 im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 12.08.2010, 10:08
  3. word nach byte umwandeln
    Von magic33 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 21.02.2007, 17:04
  4. C-Code in hex umwandeln
    Von elkokiller im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 16.02.2006, 10:41
  5. PAL-Videosignal irgendwie nach seriell umwandeln?
    Von Trabukh im Forum Elektronik
    Antworten: 39
    Letzter Beitrag: 14.09.2005, 14:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •