RGB to HEX
-
Hi Leute!
Wisst ihr vielleicht, mit welchen Funktionen man RGB-Farbwerte in HEX-Werte
(und zurück) konvertieren kann?thx
crazychicken
-
spezifizier das mal. ist dein problem, an die r/g/b bytes zu kommen, oder ein byte in hex darstellung umzuwandeln
-
Jepp,
das Problem ist, an die RGB und HEX-werte heranzukommen -
eben ein Konverter für beide Formate (praktisch wie ein Euro/DM-Rechner)
-
crazychicken schrieb:
Jepp,
das Problem ist, an die RGB und HEX-werte heranzukommen -
eben ein Konverter für beide Formate (praktisch wie ein Euro/DM-Rechner)Also ich werde da immer noch nicht Schlau raus was du willst.
An welche RGB Werte, von wo her, von COLORREF?
Oder meinst du hast, z.B. (RGB) 119,224,234 und willst dies als Hex ausgeben, also wie bei HTML, cout << "#77E0EA" << endl; ?
-
an die rgb werte kommst du mit folgendem (miesen, besser wären shifts) hack:
int rgb = GetRGBanStelle(x, y); char *helper = (char *)&rgb; // little endian unsigned char r = helper[3]; // jeweils 8 bit unsigned char g = helper[2]; unsigned char b = helper[1];für die hexdarstellung musst du nur jeweils 4 bit der farbwerte zu einem buchstaben zusammenfassen. mit 0-9 und A-F (16er format).
// das geht sicher eleganter... void 4bit2hex(unsigned char a, char *ret) { unsigned char upper4 = a; unsigned char lower4 = a; // jeweils die "ungewollten" bits rausschmeissen upper4 >> 4; lower4 << 4; lower4 >> 4; // annahme: ret = char[5]; ret[0] = '0'; ret[1] = 'x'; if (upper4 == 0) ret[2] = '0'; if (upper4 == 1) ret[2] = '1'; ... if (upper4 == 10) ret[2] = 'A'; ... if (upper4 == 15) ret[2] = 'F'; ... }hilft das?
-
GetBValue, GetGValue, GetRValue
-
crazychicken schrieb:
Hi Leute!
Wisst ihr vielleicht, mit welchen Funktionen man RGB-Farbwerte in HEX-Werte
(und zurück) konvertieren kann?Also bis her verstehe ich es nur so RGB(255,255,255) => 0xFFFFFF (#FFFFFF)
und zurück (#FFFFFF) 0xFFFFFF => COLORREF (bzw. int R, int G, int
etc.Oder was ist genau jetzt die Frage.
-
@crazychicken: gib ein beispiel für ne eingabe und ne ausgabe, dann kann dir konkreter geholfen werden...
-
MiC++ha schrieb:
Also bis her verstehe ich es nur so RGB(255,255,255) => 0xFFFFFF (#FFFFFF)
und zurück (#FFFFFF) 0xFFFFFF => COLORREF (bzw. int R, int G, int
etc.
Oder was ist genau jetzt die Frage.genau das meinte ich doch - ich möchte einfach einen RGB Wert (z.B 100,100,100)
in den dazugehörigen HEX-Wert (0x646464) "umwandeln"
ps: thx @Korbinian -es funktioniert!

-
Also Praktisch sowas:
#include <stdio.h> int R,G,B; R = 255; G = 0; B = 100; int hex = (((R*0x100)+G)*0x100)+B; char code[10]; if (hex >= 0x100000) sprintf (code, "0x%x", hex); else if (hex >=0x10000) sprintf (code, "0x0%x", hex); else if (hex >=0x1000) sprintf (code, "0x00%x", hex); else if (hex >=0x100) sprintf (code, "0x000%x", hex); else if (hex >=0x10) sprintf (code, "0x0000%x", hex); else sprintf (code, "0x00000%x", hex); /* in "code" steht nun 0xff0064 */
-
dort gibt es eine funktion int2hex oder int2basis, die kannst du auf die einzelnen farbkanäle anwenden
http://www.c-plusplus.net/forum/viewtopic.php?t=83659
dann zusammenpappen, fertigdas von MiC++ha ist auch ne gute möglichkeit. ich wollte den thread da oben nur erwähnt haben

-
...oder so:
TCHAR farbHex[100]; COLORREF farbe; farbe=RGB(128,0,0); wsprintf(farbHex,"%#06x",RGB(GetBValue(farbe),GetGValue(farbe),GetRValue(farbe))); MessageBox(0,farbHex,"X",0);
-
Viiiielen Dank an euch alle.

Jetzt kann ich endlich damit anfangen, an meinem Programm weiterzuarbeiten
(soll nen kleiner HTML-Editor werden)crazychicken
