xref: /MusicPlayer2/MusicPlayer2/ColorConvert.h (revision 4aeacb35e0259b5f45fe18ac0bc5a83fa26a2240)
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