1 #pragma once 2 //#define min3v(v1, v2, v3) ((v1)>(v2)? ((v2)>(v3)?(v3):(v2)):((v1)>(v3)?(v3):(v2))) 3 //#define max3v(v1, v2, v3) ((v1)<(v2)? ((v2)<(v3)?(v3):(v2)):((v1)<(v3)?(v3):(v1))) 4 5 struct ColorTable 6 { 7 //原始的颜色 8 COLORREF original_color; 9 //变换亮度后的颜色 10 COLORREF dark0; 11 COLORREF dark1; 12 COLORREF dark1_5; 13 COLORREF dark2; 14 COLORREF dark2_5; 15 COLORREF dark3; 16 COLORREF dark4; 17 COLORREF light1; 18 COLORREF light1_5; 19 COLORREF light2; 20 COLORREF light2_5; 21 COLORREF light3; 22 COLORREF light4; 23 //固定的颜色 24 const static COLORREF WHITE{ RGB(255,255,255) }; 25 const static COLORREF BLACK{ RGB(0,0,0) }; 26 }; 27 28 class CColorConvert 29 { 30 public: 31 32 struct COLOR_RGB 33 { 34 int red; // [0,255] 35 int green; // [0,255] 36 int blue; // [0,255] 37 }; 38 39 struct COLOR_HSL 40 { 41 float hue; // [0,360] 42 float saturation; // [0,100] 43 float luminance; // [0,100] 44 }; 45 46 CColorConvert(); 47 ~CColorConvert(); 48 49 static ColorTable m_gray_color; 50 51 // Converts RGB to HSL 52 static void RGBtoHSL(const COLOR_RGB *rgb, COLOR_HSL *hsl); 53 54 // Converts HSL to RGB 55 static void HSLtoRGB(const COLOR_HSL *hsl, COLOR_RGB *rgb); 56 57 //根据ColorTable中的original_color获取其他颜色 58 static void ConvertColor(ColorTable& color_table); 59 60 //去色(将颜色的饱和度降为0) 61 static void Desaturate(COLORREF& color); 62 63 //当颜色的亮度低于一个值时降低其亮度 64 static void ReduceLuminance(COLORREF& color); 65 66 //计算两种颜色的渐变颜色。percent从0~100,当percent为0时返回color1,100时返回color2,其他值返回两种颜色的中间颜色 67 static COLORREF GetGradientColor(COLORREF color1, COLORREF color2, int percent); 68 }; 69 70