| 769 | } |
| 770 | |
| 771 | void CColorCopDlg::ComputeHSV(int red, int green, int blue, |
| 772 | double& outH, double& outS, double& outV) { |
| 773 | double rf = red / RGB_MAX_D; |
| 774 | double gf = green / RGB_MAX_D; |
| 775 | double bf = blue / RGB_MAX_D; |
| 776 | |
| 777 | double maxv = std::max({rf, gf, bf}); |
| 778 | double minv = std::min({rf, gf, bf}); |
| 779 | double delta = maxv - minv; |
| 780 | |
| 781 | // Value (0–100) |
| 782 | outV = maxv * 100.0; |
| 783 | |
| 784 | // Saturation (0–100) |
| 785 | outS = (maxv == 0.0) ? 0.0 : (delta / maxv) * 100.0; |
| 786 | |
| 787 | // Hue (0–360) |
| 788 | if (delta <= HSL_EPSILON) { |
| 789 | outH = 0.0; |
| 790 | } else if (maxv == rf) { |
| 791 | outH = 60.0 * fmod(((gf - bf) / delta), 6.0); |
| 792 | } else if (maxv == gf) { |
| 793 | outH = 60.0 * (((bf - rf) / delta) + HUE_SECTOR_GREEN); |
| 794 | } else { |
| 795 | outH = 60.0 * (((rf - gf) / delta) + HUE_SECTOR_BLUE); |
| 796 | } |
| 797 | |
| 798 | if (outH < 0.0) |
| 799 | outH += 360.0; |
| 800 | } |
| 801 | |
| 802 | void CColorCopDlg::RecalcZoom() { |
| 803 | ASSERT(m_MagLevel >= kMinZoom && m_MagLevel <= kMaxZoom); |
nothing calls this directly
no outgoing calls
no test coverage detected