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 MakroRGB
gibt, in dem die r, g, b Werte drin stehen und das es eineCOLORREF
Variable gibt, die den Wert für r, g, b hat.
Jetzt weiß ich aber nicht, wie ich mirRGB
oderCOLORREF
zurückgeben lassen kann?
-
Mit den Makros
GetRValue
,GetGValue
undGetBValue
. So wie es da beschrieben steht: https://docs.microsoft.com/en-us/windows/win32/gdi/colorrefAlso 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 einenCOLORREF
Wert bastelt. Schau dir die Implementierung vonRGB
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 eintypedef
. Und zwar eintypedef
aufDWORD
.COLORREF
stattDWORD
zu schreiben ist bloss Konvention, man kennzeichnet damit dass diesesDWORD
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.