| 1057 | } |
| 1058 | |
| 1059 | void CColorCopDlg::HSLtoRGB(double H, double S, double L) { |
| 1060 | if (S == 0) { |
| 1061 | r = g = b = static_cast<int>(L * RGB_MAX_D); |
| 1062 | } else { |
| 1063 | double h = (H - static_cast<int>(H)) * 6.0; |
| 1064 | int caseH = static_cast<int>(h); |
| 1065 | |
| 1066 | double f = h - static_cast<int>(h); |
| 1067 | double p = L * (1.0 - S); |
| 1068 | double q = L * (1.0 - S * f); |
| 1069 | double t = L * (1.0 - (S * (1.0 - f))); |
| 1070 | |
| 1071 | switch (caseH) { |
| 1072 | case 0: |
| 1073 | r = static_cast<int>((L) * RGB_MAX_D); |
| 1074 | g = static_cast<int>((t) * RGB_MAX_D); |
| 1075 | b = static_cast<int>((p) * RGB_MAX_D); |
| 1076 | break; |
| 1077 | case 1: |
| 1078 | r = static_cast<int>((q) * RGB_MAX_D); |
| 1079 | g = static_cast<int>((L) * RGB_MAX_D); |
| 1080 | b = static_cast<int>((p) * RGB_MAX_D); |
| 1081 | break; |
| 1082 | case 2: |
| 1083 | r = static_cast<int>((p) * RGB_MAX_D); |
| 1084 | g = static_cast<int>((L) * RGB_MAX_D); |
| 1085 | b = static_cast<int>((t) * RGB_MAX_D); |
| 1086 | break; |
| 1087 | case 3: |
| 1088 | r = static_cast<int>((p) * RGB_MAX_D); |
| 1089 | g = static_cast<int>((q) * RGB_MAX_D); |
| 1090 | b = static_cast<int>((L) * RGB_MAX_D); |
| 1091 | break; |
| 1092 | case 4: |
| 1093 | r = static_cast<int>((t) * RGB_MAX_D); |
| 1094 | g = static_cast<int>((p) * RGB_MAX_D); |
| 1095 | b = static_cast<int>((L) * RGB_MAX_D); |
| 1096 | break; |
| 1097 | case 5: |
| 1098 | r = static_cast<int>((L) * RGB_MAX_D); |
| 1099 | g = static_cast<int>((p) * RGB_MAX_D); |
| 1100 | b = static_cast<int>((q) * RGB_MAX_D); |
| 1101 | break; |
| 1102 | } |
| 1103 | } |
| 1104 | } |
| 1105 | |
| 1106 | void CColorCopDlg::UpdateCMYKFromRGB(int red, int green, int blue) { |
| 1107 | // Normalize RGB to [0,1] |
nothing calls this directly
no outgoing calls
no test coverage detected