**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
#include <cstdio>
#include <sstream>
#include <iostream>
+#include <iomanip>
#endif
-static ColorReal
+ColorReal
Color::hex2real(String s)
{
std::istringstream i(s);
return n / 255.0f;
}
-static const String
+const String
Color::real2hex(ColorReal c)
{
std::ostringstream o;
value_type r, g, b;
try
{
- if (hex.size() == 3)
+ if (hex.size() == 1)
+ {
+ r = hex2real(hex.substr(0,1)+hex.substr(0,1));
+ r_ = g_ = b_ = r;
+ }
+ else if (hex.size() == 3)
{
r = hex2real(hex.substr(0,1)+hex.substr(0,1));
g = hex2real(hex.substr(1,1)+hex.substr(1,1));
}
}
+const String
+Color::get_string(void)const
+{
+ std::ostringstream o;
+ o << std::fixed << std::setprecision(3) << "#" << get_hex() << " : " << std::setw(6) << a_;
+ return String(o.str().c_str());
+}
+
#if 0
Color&
Color::rotate_uv(const Angle& theta)const
// We add COLOR_EPSILON in order to avoid a divide-by-zero condition.
// This causes DIVIDE to bias toward positive values, but the effect is
- // really neglegable. There is a reason why we use COLOR_EPSILON--we
+ // really negligible. There is a reason why we use COLOR_EPSILON--we
// want the change to be imperceptable.
b.set_r(((b.get_r()/(a.get_r()+COLOR_EPSILON))-b.get_r())*(amount)+b.get_r());