2 // SPDX-License-Identifier: BSD-3-Clause
3 // Copyright Contributors to the OpenEXR Project.
7 /// @file ImathColorAlgo.cpp
9 /// @brief Implementation of non-template items declared in ImathColorAlgo.h
12 #include "ImathColorAlgo.h"
14 IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER
17 hsv2rgb_d (const Vec3<double>& hsv) IMATH_NOEXCEPT
23 double x = 0.0, y = 0.0, z = 0.0;
30 int i = int (std::floor (hue));
32 double p = val * (1 - sat);
33 double q = val * (1 - (sat * f));
34 double t = val * (1 - (sat * (1 - f)));
70 return Vec3<double> (x, y, z);
74 hsv2rgb_d (const Color4<double>& hsv) IMATH_NOEXCEPT
80 double r = 0.0, g = 0.0, b = 0.0;
87 int i = int (std::floor (hue));
89 double p = val * (1 - sat);
90 double q = val * (1 - (sat * f));
91 double t = val * (1 - (sat * (1 - f)));
127 return Color4<double> (r, g, b, hsv.a);
131 rgb2hsv_d (const Vec3<double>& c) IMATH_NOEXCEPT
133 const double& x = c.x;
134 const double& y = c.y;
135 const double& z = c.z;
137 double max = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
138 double min = (x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z);
139 double range = max - min;
154 h = 2 + (z - x) / range;
156 h = 4 + (x - y) / range;
163 return Vec3<double> (hue, sat, val);
167 rgb2hsv_d (const Color4<double>& c) IMATH_NOEXCEPT
169 const double& r = c.r;
170 const double& g = c.g;
171 const double& b = c.b;
173 double max = (r > g) ? ((r > b) ? r : b) : ((g > b) ? g : b);
174 double min = (r < g) ? ((r < b) ? r : b) : ((g < b) ? g : b);
175 double range = max - min;
190 h = 2 + (b - r) / range;
192 h = 4 + (r - g) / range;
199 return Color4<double> (hue, sat, val, c.a);
202 IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT