Konvertieren von Hex zu RGB. Wo ist mein Fehler?!
-
Glaub im Hex stehen die Zahlen in verkehrter Reihenfolge...
Also1212FA
-
ich wandle die RGB werte so in hex um
strColor.Format("%02X%02X%02X",GetRValue(m_rgbColor),GetGValue(m_rgbColor),GetBValue(m_rgbColor));
und kriege dann FA1212
nun möchte ich das wieder rückgängig machen, aber wie?!
wo liegt mein fehler?!
-
Oh mein Gott, mach es so wie du es zu erst machen wolltest... Nur halt Rot und Blau vertauschen. Dann kriegste auch die richtige Farbe raus!
-
Left(0)????
-
was ist an Left(0) falsch?!
-
Wenn du die ersten beiden Zeichen eines Strings erhalten willst, musst du
Left(2) verwenden, also insgesamt:COLORREF HexToRGB(CString strHex) { int iRed = atoi(strHex.Left(2)); int iGreen = atoi(strHex.Mid(2, 2)); int iBlue = atoi(strHex.Right(2)); return RGB(iRed,iGreen,iBlue); }
-
Sowieso fällt mir jetzt erst einmal auf, wie (schuldigung) falsch dein Code ist
Angenommen, deine Farbe ist FA1212, dann wird
iRed = atoi("FA") = 0
iGreen = atoi("12") = 12
iBlue = atoi("12") = 12,du erhälst also die Farbe RGB(0, 12, 12) und da stimmt kein einziger RGB-Wert!
-
Hab die Lösung gefunden. Es lag an atoi!
Das hier ist die Lösung:
int _httoi(const TCHAR *value) { struct CHexMap { TCHAR chr; int value; }; const int HexMapL = 16; CHexMap HexMap[HexMapL] = { {'0', 0}, {'1', 1}, {'2', 2}, {'3', 3}, {'4', 4}, {'5', 5}, {'6', 6}, {'7', 7}, {'8', 8}, {'9', 9}, {'A', 10}, {'B', 11}, {'C', 12}, {'D', 13}, {'E', 14}, {'F', 15} }; TCHAR *mstr = _tcsupr(_tcsdup(value)); TCHAR *s = mstr; int result = 0; if (*s == '0' && *(s + 1) == 'X') s += 2; bool firsttime = true; while (*s != '\0') { bool found = false; for (int i = 0; i < HexMapL; i++) { if (*s == HexMap[i].chr) { if (!firsttime) result <<= 4; result |= HexMap[i].value; found = true; break; } } if (!found) break; s++; firsttime = false; } free(mstr); return result; } COLORREF HexToRGB(CString strHex) { int iRed = _httoi(strHex.Left(2)); int iGreen = _httoi(strHex.Mid(2, 2)); int iBlue = _httoi(strHex.Right(2)); return RGB(iRed,iGreen,iBlue); }
danke an alle!!!!
-
Perfekt!
-
wäre das nicht was fürs Faq?!