- Akku Tests und Balkonkraftwerk Speicher    Werbung      
Ergebnis 1 bis 10 von 63

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    da bin ich jetzt gespantn (ich habs noch nicht hingekriegt, evtl was falsch verstanden)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.693
    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); 
    }
    Bild  

    Ich hoffe, dass es jetzt besser ist!

  3. #3
    HaWe
    Gast
    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!

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.693
    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 18:22 Uhr)

  5. #5
    HaWe
    Gast
    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.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.693
    Schau noch mal im letzten Beitrag vor Deinem. Habe es geändert.

    Allerdings glaube ich auch, dass das
    Code:
    R = (uint8_t)R;
    überflüssig ist. Weil der kleinste Typ, den der Arduino kennt, ist: integer
    Er würde den von Dir geglaubten 8-Bit-Wert vermutlich als Integer ablegen/speichern. So, wie er nach der Berechnung schon vorliegt.

  7. #7
    HaWe
    Gast
    das habe ich verstanden und auch so gemacht.
    aber nein, der kleinste Wert ist uint16_t , nicht int, denn int ist bei mir int32_t (ARM Cortex M0 = Arduino M0/Zero), deshalb ist es immer explizit auf uint16_t oder uint8_t gecastet.

    Tipps sind wirklich sehr willkomen, aber bitte immer vorher selber testen!

Ähnliche Themen

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

Berechtigungen

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

    Werbung      12V Akku bauen