rgb umrechnen auf dezimal



  • hi

    wie rechne ich rgb werte in int ( dezimal ) um?

    sprich

    RGB( X,Y,Z); x,y,z, element dez

    wie komme ich jetzt auf A?

    A = RBG(X,Y,Z)



  • X+Y+Z?

    .MamboKurt



  • dir ist schon klar das RGB ein farbraum ist ( also muss es mit multiplikation gehen )

    der farbraum sind 24bit

    weiss ( enthält alle farben R und G und B UND das mit dem höchsten wert )

    weiss = RGB(255,255,255) = 16 777 215 (sprich du kannst soviel versch farben darstellen)

    bei rot (255,0,0) = 255

    also würd ich ja rechnen

    255 * nichts * nichts = 255 // wobei gilt (" nichts != 0 ")

    ====================

    bei grün ( 0,255,0 ) = 65280

    256 * 255 * nichts

    ok jetzt z.b.

    ( 30,80,250) = 16 404 510

    wie rechne ich das jetzt???



  • Meinst Du sowas?

    int RGB( int r, int g, int b )
    { 
      return ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); 
    }
    

    Ist aber eher kein mathematisches Problem. 😃



  • ok, schön

    und wie geb ich das in einem 0815 taschenrechner ein? auch mit bitschift und so?

    da muss es doch einen "normalen taschenrechner-eingeb-weg geben"



  • Von einem Taschenrechner war bislang nicht die Rede. Ich bin davon ausgegangen, das wir uns hier im C/C++ Forum befinden.

    Das Ganze entspricht R * 65536 + G * 256 + B, wobei & 0xFF lediglich die Einzelwerte auf 255 begrenzen soll.



  • wenn rgbnoobs Beispiele stimmen, müsste es aber umgekehrt sein:

    r + g*256 + b*65536



  • Ich will mich jetzt nicht mit Mathematikern streiten, aber im RGB-Farbraum ist Rot 0xFF0000 also 255*65535 = 16711425.

    Edit Sorry, kleiner Rechenfehler.



  • Manfred Schmidtke schrieb:

    Von einem Taschenrechner war bislang nicht die Rede. Ich bin davon ausgegangen, das wir uns hier im C/C++ Forum befinden.

    Das Ganze entspricht R * 65536 + G * 256 + B, wobei & 0xFF lediglich die Einzelwerte auf 255 begrenzen soll.

    Dommel hat recht, hab im debugger mit anderen zahlen überprüft

    Ja du bist im c++ forum ABER nicht in der kategorie

    entwicklungssysteme ( z.b. mfc )
    oder
    programmiersprachen ( c++ ) // dann hätt ich es da gepostet wenn ich den algo wissen wollte

    sondern under

    spezialitäten ( mathematik ) // und hier erwartet man mathematische formeln, keinen code ( höchstens pseudocode ) 😉

    aber trozdem danke euch beiden, besonders dommel



  • dir ist schon klar das RGB ein farbraum ist

    und du willst jetzt aus dem Vektor einfach einen Skalar machen oder wie? es macht keinen Sinn die Komponenten irgendwie zu einer Dezimalzahl zusammen zu rechnnen



  • und dennoch wird dieser Farbraum auf eine 24-bit-integer abgebildet, oder?



  • ja, RGB ist als int definiert

    z.b.

    int meinefarbe = RGB(20,30,40);  // im "pc" ist die farbe jetzt als skalar codiert
    
    // beim initialisieren wird die funktion RGB aufgerufen ( so stell ich es mir mal vor )
    

    wenn ich jetzt sage

    meinelistbox.SetzeFarbe( aktuellezeile, meinefarbe );
    

    Dann nimmt der rechener den int wert und schaut nach welche farbe er setzen muss.

    D.h. man muss die codierung wissen und kann eigentlich rein von

    RGB(20,30,40) nicht auf den int wert schliessen.

    die codierung ist ja

    r + g*256 + b*65536

    hätte ja eigenlich auch so sein können

    r + g*65536 + b*256

    Warum ich das brauche? weil ich eine datenstruktur ausgebe in ein txt file und ich da zu jedem wert die farbe brauche, und da steht dann int dran. so wollte ich schnell feststellen welche der versch. farben das ist.

    wenn ich z.b. 5 versch. farben fest def habe. und ich jetzt die im define ändere, dann möchte ich im textfile sehen welche daten welche farben zugeordnet sind. 😉



  • sry, dass ich mich am anfang so unverständlich und auch falsch geäußert habe. meine natürlich X + Y*256 + Z*65536
    *demütigverneigendundrückwärtswegschleichdumverzeihungbittend*

    .MamboKurt



  • Klar macht das Sinn rgbnoob. Wollte Deinem Vorposter nur sagen, dass durch die Codierung natürlich jedem Wert eineindeutig eine Farbe zugeordnet ist.

    Schau mal, was Du zum Thema HSV-Darstellung finden kannst, denn für die Generierung von Farben (aus dem Ärmel heraus) könnte dieses Farbmodell für Dich noch praktischer sein.


Anmelden zum Antworten