RGB-Werte der Konsole-Farben auslesen



  • Hallo,
    ich habe die Funktion,

            static void printColorTable()
    	{
    		CONSOLE_SCREEN_BUFFER_INFOEX info;
    		info.cbSize = sizeof(info);
    		GetConsoleScreenBufferInfoEx(outHnd, &info);
    		for (std::size_t i = 0; i < 16; ++i)
    		{
    			std::cout << info.ColorTable[i] << '\n';
    		}
    	}
    

    um mir die Farbwerte ausgeben zu lassen. Das sind drei aufeinanderfolgende Werte. Die würde ich gerne trennen.
    Ich weiß, das es ein Makro RGB gibt, in dem die r, g, b Werte drin stehen und das es eine COLORREF Variable gibt, die den Wert für r, g, b hat.
    Jetzt weiß ich aber nicht, wie ich mir RGB oder COLORREF zurückgeben lassen kann?



  • Mit den Makros GetRValue, GetGValue und GetBValue. So wie es da beschrieben steht: https://docs.microsoft.com/en-us/windows/win32/gdi/colorref

    Also sowas wie

    std::cout << GetRValue(info.ColorTable[i]) << ", " << GetGValue(info.ColorTable[i]) << ", " << GetBValue(info.ColorTable[i]) << '\n';
    


  • ps: Ich glaube es hapert auch noch etwas am Grundverständnis was Makros, Typedefs etc. angeht. C(++) Grundlagen halt.

    @zeropage sagte in RGB-Werte der Konsole-Farben auslesen:

    Ich weiß, das es ein Makro RGB gibt, in dem die r, g, b Werte drin stehen

    Nein, die "stehen" da nicht "drin". RGB ist ein Makro das du mit RGB Werten füttern kannst, und das dir daraus einen COLORREF Wert bastelt. Schau dir die Implementierung von RGB an (F12 ist dein Freund).

    und das es eine COLORREF Variable gibt, die den Wert für r, g, b hat.

    COLORREF ist keine Variable, sondern ein typedef. Und zwar ein typedef auf DWORD. COLORREF statt DWORD zu schreiben ist bloss Konvention, man kennzeichnet damit dass dieses DWORD verwendet wird um einen R/G/B Farbwert zu transportieren.



  • ... und wenn Du Dir Hustis MSDN-Link ansiehst dann kannst Du Dir auch selbst zusammenreimen wie die Makros an die rgb-Werte kommen - Bitgemaske und geshifte.


Log in to reply