etk/etk/Color_8_bits.cxx

462 lines
18 KiB
C++

template<> const uint8_t Color<uint8_t, 1>::defaultAlpha(0xFF);
template<> const uint8_t Color<uint8_t, 2>::defaultAlpha(0xFF);
template<> const uint8_t Color<uint8_t, 3>::defaultAlpha(0xFF);
template<> const uint8_t Color<uint8_t, 4>::defaultAlpha(0xFF);
template<> const Color<uint8_t, 1> Color<uint8_t, 1>::emptyColor(0);
template<> const Color<uint8_t, 2> Color<uint8_t, 2>::emptyColor(0,0);
template<> const Color<uint8_t, 3> Color<uint8_t, 3>::emptyColor(0,0,0);
template<> const Color<uint8_t, 4> Color<uint8_t, 4>::emptyColor(0,0,0,0xFF);
// this work ...
template<> template<> Color<uint8_t,1>::Color(const Color<uint8_t, 1>& _obj) {
m_element[0] = _obj.r();
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint8_t, 1>& _obj) {
m_element[0] = _obj.r();
m_element[1] = 0;
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint8_t, 1>& _obj) {
m_element[0] = _obj.r();
m_element[1] = 0;
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint8_t, 1>& _obj) {
m_element[0] = _obj.r();
m_element[1] = 0;
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint8_t, 2>& _obj) {
m_element[0] = _obj.r();
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint8_t, 2>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint8_t, 2>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint8_t, 2>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint8_t, 3>& _obj) {
m_element[0] = _obj.r();
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint8_t, 3>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint8_t, 3>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
m_element[2] = _obj.b();
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint8_t, 3>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
m_element[2] = _obj.b();
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint8_t, 4>& _obj) {
m_element[0] = _obj.r();
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint8_t, 4>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint8_t, 4>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
m_element[2] = _obj.b();
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint8_t, 4>& _obj) {
m_element[0] = _obj.r();
m_element[1] = _obj.g();
m_element[2] = _obj.b();
m_element[3] = _obj.a();
}
// ===========================================================================================================
template<> template<> Color<uint8_t,1>::Color(const Color<uint16_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint16_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = 0;
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint16_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = 0;
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint16_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = 0;
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint16_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint16_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint16_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint16_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint16_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint16_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint16_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
m_element[2] = (uint8_t)(_obj.b()>>8);
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint16_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
m_element[2] = (uint8_t)(_obj.b()>>8);
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint16_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint16_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint16_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
m_element[2] = (uint8_t)(_obj.b()>>8);
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint16_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>8);
m_element[1] = (uint8_t)(_obj.g()>>8);
m_element[2] = (uint8_t)(_obj.b()>>8);
m_element[3] = (uint8_t)(_obj.a()>>8);
}
// ===========================================================================================================
template<> template<> Color<uint8_t,1>::Color(const Color<uint32_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint32_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = 0;
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint32_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = 0;
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint32_t, 1>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = 0;
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint32_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint32_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint32_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint32_t, 2>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint32_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint32_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint32_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
m_element[2] = (uint8_t)(_obj.b()>>24);
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint32_t, 3>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
m_element[2] = (uint8_t)(_obj.b()>>24);
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<uint32_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
}
template<> template<> Color<uint8_t,2>::Color(const Color<uint32_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
}
template<> template<> Color<uint8_t,3>::Color(const Color<uint32_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
m_element[2] = (uint8_t)(_obj.b()>>24);
}
template<> template<> Color<uint8_t,4>::Color(const Color<uint32_t, 4>& _obj) {
m_element[0] = (uint8_t)(_obj.r()>>24);
m_element[1] = (uint8_t)(_obj.g()>>24);
m_element[2] = (uint8_t)(_obj.b()>>24);
m_element[3] = (uint8_t)(_obj.a()>>24);
}
// ===========================================================================================================
template<> template<> Color<uint8_t,1>::Color(const Color<float, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,2>::Color(const Color<float, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = 0;
}
template<> template<> Color<uint8_t,3>::Color(const Color<float, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = 0;
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<float, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = 0;
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<float, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,2>::Color(const Color<float, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,3>::Color(const Color<float, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<float, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<float, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,2>::Color(const Color<float, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,3>::Color(const Color<float, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
m_element[2] = (uint8_t)(etk::avg(0.0f, _obj.b(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,4>::Color(const Color<float, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
m_element[2] = (uint8_t)(etk::avg(0.0f, _obj.b(), 1.0f)*255.0f);
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<float, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,2>::Color(const Color<float, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,3>::Color(const Color<float, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
m_element[2] = (uint8_t)(etk::avg(0.0f, _obj.b(), 1.0f)*255.0f);
}
template<> template<> Color<uint8_t,4>::Color(const Color<float, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0f, _obj.r(), 1.0f)*255.0f);
m_element[1] = (uint8_t)(etk::avg(0.0f, _obj.g(), 1.0f)*255.0f);
m_element[2] = (uint8_t)(etk::avg(0.0f, _obj.b(), 1.0f)*255.0f);
m_element[3] = (uint8_t)(etk::avg(0.0f, _obj.a(), 1.0f)*255.0f);
}
// ===========================================================================================================
template<> template<> Color<uint8_t,1>::Color(const Color<double, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,2>::Color(const Color<double, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = 0;
}
template<> template<> Color<uint8_t,3>::Color(const Color<double, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = 0;
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<double, 1>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = 0;
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<double, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,2>::Color(const Color<double, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,3>::Color(const Color<double, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
m_element[2] = 0;
}
template<> template<> Color<uint8_t,4>::Color(const Color<double, 2>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
m_element[2] = 0;
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<double, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,2>::Color(const Color<double, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,3>::Color(const Color<double, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
m_element[2] = (uint8_t)(etk::avg(0.0, _obj.b(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,4>::Color(const Color<double, 3>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
m_element[2] = (uint8_t)(etk::avg(0.0, _obj.b(), 1.0)*255.0);
m_element[3] = defaultAlpha;
}
template<> template<> Color<uint8_t,1>::Color(const Color<double, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,2>::Color(const Color<double, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,3>::Color(const Color<double, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
m_element[2] = (uint8_t)(etk::avg(0.0, _obj.b(), 1.0)*255.0);
}
template<> template<> Color<uint8_t,4>::Color(const Color<double, 4>& _obj) {
m_element[0] = (uint8_t)(etk::avg(0.0, _obj.r(), 1.0)*255.0);
m_element[1] = (uint8_t)(etk::avg(0.0, _obj.g(), 1.0)*255.0);
m_element[2] = (uint8_t)(etk::avg(0.0, _obj.b(), 1.0)*255.0);
m_element[3] = (uint8_t)(etk::avg(0.0, _obj.a(), 1.0)*255.0);
}
// ===========================================================================================================
template<> etk::String toString<Color<uint8_t, 1> >(const Color<uint8_t, 1>& _val) {
return _val.getString();
}
#if __cplusplus >= 201103L
template<> etk::UString toUString<Color<uint8_t, 1>>(const Color<uint8_t, 1>& _val) {
return toUString(_val.getString());
}
template<> bool from_string<Color<uint8_t, 1>>(Color<uint8_t, 1>& _variableRet, const etk::UString& _value) {
_variableRet = Color<uint8_t, 1>(toString(_value));
return true;
}
#endif
template<> bool from_string<Color<uint8_t, 1> >(Color<uint8_t, 1>& _variableRet, const etk::String& _value) {
_variableRet = Color<uint8_t, 1>(_value);
return true;
}
template<> etk::String toString<Color<uint8_t, 2> >(const Color<uint8_t, 2>& _val) {
return _val.getString();
}
#if __cplusplus >= 201103L
template<> etk::UString toUString<Color<uint8_t, 2>>(const Color<uint8_t, 2>& _val) {
return toUString(_val.getString());
}
template<> bool from_string<Color<uint8_t, 2>>(Color<uint8_t, 2>& _variableRet, const etk::UString& _value) {
_variableRet = Color<uint8_t, 2>(toString(_value));
return true;
}
#endif
template<> bool from_string<Color<uint8_t, 2> >(Color<uint8_t, 2>& _variableRet, const etk::String& _value) {
_variableRet = Color<uint8_t, 2>(_value);
return true;
}
template<> etk::String toString<Color<uint8_t, 3> >(const Color<uint8_t, 3>& _val) {
return _val.getString();
}
#if __cplusplus >= 201103L
template<> etk::UString toUString<Color<uint8_t, 3>>(const Color<uint8_t, 3>& _val) {
return toUString(_val.getString());
}
template<> bool from_string<Color<uint8_t, 3>>(Color<uint8_t, 3>& _variableRet, const etk::UString& _value) {
_variableRet = Color<uint8_t, 3>(toString(_value));
return true;
}
#endif
template<> bool from_string<Color<uint8_t, 3> >(Color<uint8_t, 3>& _variableRet, const etk::String& _value) {
_variableRet = Color<uint8_t, 3>(_value);
return true;
}
template<> etk::String toString<Color<uint8_t, 4> >(const Color<uint8_t, 4>& _val) {
return _val.getString();
}
#if __cplusplus >= 201103L
template<> etk::UString toUString<Color<uint8_t, 4>>(const Color<uint8_t, 4>& _val) {
return toUString(_val.getString());
}
template<> bool from_string<Color<uint8_t, 4>>(Color<uint8_t, 4>& _variableRet, const etk::UString& _value) {
_variableRet = Color<uint8_t, 4>(toString(_value));
return true;
}
#endif
template<> bool from_string<Color<uint8_t, 4> >(Color<uint8_t, 4>& _variableRet, const etk::String& _value) {
_variableRet = Color<uint8_t, 4>(_value);
return true;
}