26 #ifndef SCRIBO_UTIL_HEX_TO_COLOR_HH
27 # define SCRIBO_UTIL_HEX_TO_COLOR_HH
36 #include <mln/value/rgb8.hh>
37 #include <mln/value/int_u8.hh>
47 value::rgb8 hex_to_color(
const std::string& hex);
50 # ifndef MLN_INCLUDE_ONLY
55 value::int_u8 convert_from_hex(
const std::string& hex)
57 value::int_u8
value = 0;
59 int b = hex.length() - 1;
61 for (; b >= 0; a++, b--)
63 if (hex[b] >=
'0' && hex[b] <=
'9')
65 value += (hex[b] -
'0') * (1 << (a * 4));
73 value += 10 * (1 << (a * 4));
77 value += 11 * (1 << (a * 4));
81 value += 12 * (1 << (a * 4));
85 value += 13 * (1 << (a * 4));
89 value += 14 * (1 << (a * 4));
93 value += 15 * (1 << (a * 4));
96 std::cerr <<
"Error, invalid character '"
97 << hex[a] <<
"' in hex number" << std::endl;
110 value::rgb8 hex_to_color(
const std::string& hex)
112 mln_trace(
"scribo::util::hex_to_color");
114 mln_precondition(!hex.empty());
120 red = hex.substr(1, 2);
121 green = hex.substr(3, 2);
122 blue = hex.substr(5, 2);
126 red = hex.substr(0, 2);
127 green = hex.substr(2, 2);
128 blue = hex.substr(4, 2);
131 value::rgb8 v(internal::convert_from_hex(red),
132 internal::convert_from_hex(green),
133 internal::convert_from_hex(blue));
138 # endif // ! MLN_INCLUDE_ONLY
144 #endif // ! SCRIBO_UTIL_HEX_TO_COLOR_HH