- LiFePO4 Speicher Test    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
    hi,
    ich sehe schon, da sind 2 bitakrobatikspezialisten unter sich...
    für mich ist das zu hoch oder besser: zu low-level.

    Immerhin:

    ES GEHT!
    (@moppi: mit deinem letzten Code)
    Code:
    uint16_t ColorRGB216bit(uint16_t R, uint16_t G, uint16_t B) {
    
       return  (R>>3<<11) | (G>>2<<5) | (B>>3);
    }
    
    
    void Color16bit2colorRGB(uint16_t color16, uint16_t &R, uint16_t &G, uint16_t &B) {
    
       R = (uint8_t) (color16 >> 11) << 3;
       G = (uint8_t)((color16 & 2016) >> 3);
       B = (uint8_t) (color16 & 31) << 3;
       
       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); 
    }
    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
    irgendwo muss gestern der Wurm drin gewesen sein.
    Vielen herzlichen Dank! (y)


    Zum Verständnis noch 1 Frage:
    ein r=255 Wert wird ja zu r=248, das liegt ja an der kleineren 5bit-Codierbreite.
    Kann man das bei der Rückumwandlung wieder sinnvoll auf 255 hochskalieren, also runden, analog auch für die mittleren 6bit Werte?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    41
    Beiträge
    3.416
    nein leider nicht, das problem ist eine verlorene information kann man nicht wiederherstellen, wenn 2 bzw. 3 bits fehlen, fehlen sie, man könnte höchstens auf R und B +4 oder +3 aufaddieren, denn (2^3bit) -1 = 7, davon die Hälfte ungefähr 3 bis 4 um wenigstens etwas annähernd den original wert wieder her zu stellen. Auf G müsstest du dann +2 oder +1 aufaddieren
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    HaWe
    Gast
    ja, ich hatte da an einen Multiplikationsfaktor gedacht, der größere Zahlen bevorzugt und kleine vernachlässigt, so dass keine 1,2,3 oder 4 auf eine Null aufaddiert werden.

    also was in der Art
    R*= 255/248
    G*= 255/252
    B*= 255/248

    edit:
    Worauf ich eigentlich hinaus wollte - klar kann man es "irgendwie" machen, so oder so, meine Frage geht eher in die Richtung, wie es standardmäßig gmacht wird, denn für die Umrechnung R,G,B in color16bit und zurück gibts ja sicher Standardverfahren, damit alle immer dasselbe Ergebnis rauskriegen, egal ob Geforce, Intel, Adobe oder Broadcom.
    Geändert von HaWe (11.09.2018 um 13:09 Uhr)

Ä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      fchao-Sinus-Wechselrichter AliExpress