aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp/colors/HSV.h
diff options
context:
space:
mode:
Diffstat (limited to 'meowpp/colors/HSV.h')
-rw-r--r--meowpp/colors/HSV.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/meowpp/colors/HSV.h b/meowpp/colors/HSV.h
new file mode 100644
index 0000000..d5e21a4
--- /dev/null
+++ b/meowpp/colors/HSV.h
@@ -0,0 +1,69 @@
+#ifndef HSV_H_
+#define HSV_H_
+
+#include "RGB.h"
+#include "YUV.h"
+#include "HSL.h"
+
+namespace meow{
+ template<class T>
+ class HSV{
+ protected:
+ T hsv_[3];
+ HSV();
+ HSV(T const& h, T const& s, T const& v);
+ HSV(T const* hsv);
+ public:
+ virtual ~HSV(){ }
+ ///////////////// **# not force #** ////////////////
+ virtual T hMax() const = 0;
+ virtual T hMin() const = 0;
+ virtual T sMax() const = 0;
+ virtual T sMin() const = 0;
+ virtual T vMax() const = 0;
+ virtual T vMin() const = 0;
+ /////////////////// **# access #** /////////////////
+ T h() const;
+ T s() const;
+ T v() const;
+ T hsv(size_t i) const;
+ T vsh(size_t i) const;
+ /////////////////// **# setting #** ////////////////
+ T h(T const& val);
+ T s(T const& val);
+ T v(T const& val);
+ T hsv(size_t i, T const& val);
+ T vsh(size_t i, T const& val);
+ };
+
+ class HSVf: public HSV<double>{
+ public:
+ HSVf();
+ ~HSVf();
+ HSVf(double const&h,double const&s,double const&v);
+ HSVf(double const* hsv);
+ double hMin() const;
+ double hMax() const;
+ double sMin() const;
+ double sMax() const;
+ double vMin() const;
+ double vMax() const;
+ };
+
+ template<class RGB_T, class HSV_T>
+ inline void RGB_to_HSV(RGB<RGB_T> const& rgb, HSV<HSV_T>* hsv);
+ template<class HSV_T, class RGB_T>
+ inline void HSV_to_RGB(HSV<HSV_T> const& hsv, RGB<RGB_T>* rgb);
+ template<class YUV_T, class HSV_T>
+ inline void YUV_to_HSV(YUV<YUV_T> const& yuv, HSV<HSV_T>* hsv);
+ template<class HSV_T, class YUV_T>
+ inline void HSV_to_YUV(HSV<HSV_T> const& hsv, YUV<YUV_T>* yuv);
+ template<class HSL_T, class HSV_T>
+ inline void HSL_to_HSV(HSL<HSL_T> const& hsl, HSV<HSV_T>* hsv);
+ template<class HSV_T, class HSL_T>
+ inline void HSV_to_HSL(HSV<HSV_T> const& hsv, HSL<HSL_T>* hsl);
+}
+
+#include "HSV.hpp"
+
+#endif // HSV_H_