Farbe "aufsplitten"



  • ok, gut, sonst hätte ich alles von meinem color manager, was ich schon habe, umschreiben müssen...
    gut, das solls dan wirklich mal gewesen sein.
    danke an alle, 1000x danke,
    cya



  • Sgt. Nukem:
    oh... peinlich. also ddie zweite zeile habe ich tatsächlich falsch abgeschrieben. bei der ersten (übrigens ein auszug aus der dx doku) habe ich ein etc. jinter die ersten beiden teile der rechning gesetzt, da ich keine lust hatte, diese komplett abzuschreiben.



  • Ich werde langsam Wahnsinning...........
    folgendes problem: ich setze eine 565 farbe zusammen (16 bit, logisch), und zwar so:

    unsigned short color = (unsigned short)((255 << 11) | (128 << 5) | (0));

    Die resultierende farbe ist gelb, wie das "profi-auge" erkennen sollte... (R:255, G:128, B:0)
    nun möchte ich den rot-teil der farbe haben:

    unsigned char red = (unsigned char) ((color & 0xF800) >> 11);

    wenn ich mir red ausgeben lasse, erhalte ich alles andere, als 255 (was ja der rot-teil der erstellten farbe ist),
    HELP.......



  • ROTANTEIL =((FARBE >> 11) & 0x0000001F) << 3
    GRÜNANTEIL=((FARBE >> 5) & 0x0000003F) << 2
    BLAUANTEIL=(FARBE & 0x0000001F) << 3

    Versuch es mal mit diesen Makros. Hab keine Ahnung ob das stimmt was da steht. Interessiert mich erlich auch nicht. Solange es funktioniert. 😉



  • Tetris Fan schrieb:

    Ich werde langsam Wahnsinning...........
    folgendes problem: ich setze eine 565 farbe zusammen (16 bit, logisch), und zwar so:

    unsigned short color = (unsigned short)((255 << 11) | (128 << 5) | (0));

    Die resultierende farbe ist gelb, wie das "profi-auge" erkennen sollte... (R:255, G:128, B:0)
    nun möchte ich den rot-teil der farbe haben:

    unsigned char red = (unsigned char) ((color & 0xF800) >> 11);

    wenn ich mir red ausgeben lasse, erhalte ich alles andere, als 255 (was ja der rot-teil der erstellten farbe ist),
    HELP.......

    Einfach mal Gehirn einschalten:

    Bei 32 Bit = R8G8B8 + entw. A8 oder X8
    hat jeder Farbanteil 8 Bit = 256 verschiedene Möglichkeiten ( 2^8 ),
    insgesamt also 256 * 256 * 256 = 16.777.216 verschiedene Farben.

    Bei 16 Bit = R5G6B5 hat rot und blau z.B. nur 5 Bit = 2^5 also 32 verschiendene mögliche Werte!!! 💡
    Grün mit 6 Bit = 64 verschiedene Grüntöne.

    Insgesamt also 32 x 64 x 32 = 65.536 verschiedene Farben.

    Wenn Du statt von 0 - 31 den Rotanteil mit 0 - 255 angeben will, mußt Du also skalieren... 🤡 👍 ➡ 💡



  • Hi,

    @Sgt. Nukem:
    L0L 😃 🤡

    Cu



  • [Helper] schrieb:

    Hi,

    @Sgt. Nukem:
    L0L 😃 🤡

    Cu

    @Helper:
    Ich weiß... ROTFL 😃 🤡 🕶



  • kann ich nich auch einfach sowas in der art wie...

    typedef _foo struct
    {
    unsigned r : 5;
    unsigned g : 6;
    unsigned b : 5;
    }foo;

    schreiben? dann kann ich sogar gemütlich über foo.r usw. drauf zugreifen...schließlich sollte der compiler das intern ja dann auch mit shifts machen so das es nich wirklich langsamer is...

    tschöö



  • Ihr mit eurem scheiß "foo" ... ! 👎

    😉



  • ja, das finde ich intereessant (das was TheHelper geschrieben hat), geht das auch?
    @TheHelper:
    sorry, wahrscheinlich ne dumme frage, aber was bezwecken diese :5/: 6 hinter den members?? was ist das??



  • öööööhm, sorry, ich meinte natürlich TheTester... peinlich, sorry 🙄



  • sgt nukem
    *********

    bist doch bloß neidisch ;P

    tetris fan
    **********

    die zahlen dahinter sind die anzahl der bits pro variable...sollen 2 bytes (16bit) rauskommen, das problem ist nur das eigenlich alle 32bit compiler das auf 4 byte vergrößern, wie du das bei deinem compiler verhinderst weiss ich nicht, beim lccwin32 gehts mit pragma pack und die structs sollten dann in einem separaten file sein...so wird der source auch wieder auf normalem 4 byte (meine einstellung)alignment kompiliert aber halt für die 2byte structs nur 2bytes verwendet

    tschöö

    tt



  • Hi,

    @Tetris Fan:
    Lern lieber mit 32/64 Bit werten zu arbeiten 😉 Und mach es vielleicht dann mit [b]Union[quote]

    Cu



  • Ich habs ja jetz verstanden, aber was soll ich wie mit unions machen??



  • Sgt. Nukem schrieb:

    Einfach mal Gehirn einschalten

    Sag ich schon immer, wird aber meist ignoriert...


Anmelden zum Antworten