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 MakroRGBgibt, in dem die r, g, b Werte drin stehen und das es eineCOLORREFVariable gibt, die den Wert für r, g, b hat.
Jetzt weiß ich aber nicht, wie ich mirRGBoderCOLORREFzurückgeben lassen kann?
-
Mit den Makros
GetRValue,GetGValueundGetBValue. 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".
RGBist ein Makro das du mit RGB Werten füttern kannst, und das dir daraus einenCOLORREFWert bastelt. Schau dir die Implementierung vonRGBan (F12 ist dein Freund).und das es eine COLORREF Variable gibt, die den Wert für r, g, b hat.
COLORREFist keine Variable, sondern eintypedef. Und zwar eintypedefaufDWORD.COLORREFstattDWORDzu schreiben ist bloss Konvention, man kennzeichnet damit dass diesesDWORDverwendet 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.