#include "U_ConsoleColors.h" #include "CColorInt.h" int ConsoleColors::Internal::GetBrightness(const CColorInt& color) { //CColorInt color = _color.GetIntColor(); return (color.r + color.g + color.b) / 3; } CConsoleColor ConsoleColors::Internal::GetDominantColor(const CColorInt& color, int brightness) { //CColorInt color = _color.GetIntColor(); if (brightness < 128) { if (color.r > color.g && color.r > color.b) { return CConsoleColor::Red; } if (color.g > color.r && color.g > color.b) { return CConsoleColor::Green; } if (color.b > color.r && color.b > color.g) { return CConsoleColor::Blue; } return CConsoleColor::Black; } else { if (color.r > color.g && color.r > color.b) { return CConsoleColor::LightRed; } if (color.g > color.r && color.g > color.b) { return CConsoleColor::LightGreen; } if (color.b > color.r && color.b > color.g) { return CConsoleColor::LightBlue; } return CConsoleColor::LightGray; } } CConsoleColor ConsoleColors::RGBToConsoleColor(const CColor& _color) { CColorInt color = _color.GetIntColor(); int brightness = Internal::GetBrightness(color); if (color.r == color.g && color.g == color.b) { if (brightness < 64) { return CConsoleColor::Black; } if (brightness < 128) { return CConsoleColor::DarkGray; } if (brightness < 192) { return CConsoleColor::LightGray; } return CConsoleColor::White; } else { if (color.r > 128 && color.g > 128 && color.b < 128) { return CConsoleColor::Yellow; } CConsoleColor dominantColor = Internal::GetDominantColor(color, brightness); if (dominantColor == CConsoleColor::Red) { if (color.g > 128 && color.b > 128) { return CConsoleColor::Magenta; } if (color.g > 128) { return CConsoleColor::Yellow; } return CConsoleColor::Red; } else if (dominantColor == CConsoleColor::Green) { if (color.b > 128) { return CConsoleColor::Cyan; } return CConsoleColor::Green; } else if (dominantColor == CConsoleColor::Blue) { return CConsoleColor::Blue; } else if (dominantColor == CConsoleColor::LightRed) { if (color.g > 128 && color.b > 128) { return CConsoleColor::LightMagenta; } if (color.g > 128) { return CConsoleColor::Yellow; } return CConsoleColor::LightRed; } else if (dominantColor == CConsoleColor::LightGreen) { if (color.b > 128) { return CConsoleColor::LightCyan; } return CConsoleColor::LightGreen; } else if (dominantColor == CConsoleColor::LightBlue) { return CConsoleColor::LightBlue; } } return CConsoleColor::Black; } CColor ConsoleColors::ConsoleColorToRGB(CConsoleColor color) { switch (color) { case CConsoleColor::Black: return CColor::FromIntColor({ 0, 0, 0 }); case CConsoleColor::Blue: return CColor::FromIntColor({ 0, 0, 128 }); case CConsoleColor::Green: return CColor::FromIntColor({ 0, 128, 0 }); case CConsoleColor::Cyan: return CColor::FromIntColor({ 0, 128, 128 }); case CConsoleColor::Red: return CColor::FromIntColor({ 128, 0, 0 }); case CConsoleColor::Magenta: return CColor::FromIntColor({ 128, 0, 128 }); case CConsoleColor::Brown: return CColor::FromIntColor({ 128, 128, 0 }); case CConsoleColor::LightGray: return CColor::FromIntColor({ 192, 192, 192 }); case CConsoleColor::DarkGray: return CColor::FromIntColor({ 128, 128, 128 }); case CConsoleColor::LightBlue: return CColor::FromIntColor({ 0, 0, 255 }); case CConsoleColor::LightGreen: return CColor::FromIntColor({ 0, 255, 0 }); case CConsoleColor::LightCyan: return CColor::FromIntColor({ 0, 255, 255 }); case CConsoleColor::LightRed: return CColor::FromIntColor({ 255, 0, 0 }); case CConsoleColor::LightMagenta: return CColor::FromIntColor({ 255, 0, 255 }); case CConsoleColor::Yellow: return CColor::FromIntColor({ 255, 255, 0 }); case CConsoleColor::White: return CColor::FromIntColor({ 255, 255, 255 }); default: return CColor::FromIntColor({ 0, 0, 0 }); } }