Bytereihenfolge eines Farbwerts (Byteorder) - Macro programmieren



  • Hallo,
    ich spiele ein bisschen mit Pixelwerten rum und möchte in C ein Makro programmieren, das mir aus Rot-, Grün- und Blauwerten eine Farbe zusammenbauen kann.

    Auf der Suche nach Anregungen 😃 bin ich auf das Makro gestoßen:

    // wingdi.h 
    #define RGB(r,g,b)          ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
    
    // irgend eine andere *.h
    typedef unsigned long DWORD;
    typedef DWORD COLORREF;
    
    COLORREF RGB(
      BYTE byRed,
      BYTE byGreen,
      BYTE byBlue
    );
    

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd162937%28v=vs.85%29.aspx

    Warum ist die Byteorder des Makros so wie sie ist :p, also das niederwertige Byte für die Intensität von Rot?
    Wenn ich nämlich RGB(0xFF, 0, 0) speichere, dann erhalte ich einen blauen Pixel. (Paint zeigt einen blauen Pixel an) 😕



  • vermutlich hast du den code aus einer api kopiert die es in einer anderen reihenfolge definiert hat als es in der api definiert ist die du benutzt.

    die reihenfolge an sich ist egal, sofern sich innerhalb einer api alles dran haellt. manchmal (z.B. bei openGl) kannst du angeben in welcher reihenfolge deine daten sind.



  • RGB(0xFF, 0, 0) speichere, dann erhalte ich einen blauen Pixel. (Paint zeigt einen blauen Pixel an)

    Weil dein Makro vielleicht BGR ist oder gdi eben so sein Farbformat festgelegt hat und in BMP eben anders ist oder ...



  • Okay, dann fummel ich mir aus dem Marko etwas für meine Zwecke zurecht.
    Vielen Dank für die Antworten!


Anmelden zum Antworten