28 inline constexpr std::array<unsigned,3>
Unpack(
unsigned rgb)
30 return { rgb>>16, (rgb>>8)&0xFF, rgb&0xFF };
38 inline constexpr
unsigned Repack(std::array<unsigned,3> rgb)
40 if(rgb[0] > 255 || rgb[1] > 255 || rgb[2] > 255) [[unlikely]]
43 float l = (rgb[0]*299u + rgb[1]*587u + rgb[2]*114u)*1e-3f, s = 1.f;
44 if(rgb[0] > 255) s = std::min(s, (l-255.f) / (l-rgb[0]));
45 if(rgb[1] > 255) s = std::min(s, (l-255.f) / (l-rgb[1]));
46 if(rgb[2] > 255) s = std::min(s, (l-255.f) / (l-rgb[2]));
47 rgb[0] = (rgb[0] - l) * s + l + 0.5f;
48 rgb[1] = (rgb[1] - l) * s + l + 0.5f;
49 rgb[2] = (rgb[2] - l) * s + l + 0.5f;
50 return (std::min(rgb[0],255u)<<16)
51 + (std::min(rgb[1],255u)<<8)
52 + (std::min(rgb[2],255u)<<0);
62 inline constexpr
unsigned Mix(
unsigned color1,
unsigned color2,
63 unsigned fac1,
unsigned fac2,
67 for(
unsigned n=0; n<3; ++n) a[n] = (a[n]*fac1 + b[n]*fac2)/(sum);
75 return ~cmy & 0xFFFFFF;
81 return Mix(0u, ~cmyk >> 8, cmyk & 255, ~cmyk & 255, 255);
unsigned cmyk2rgb(unsigned cmyk)
Definition: color.hh:79
unsigned cmy2rgb(unsigned cmy)
Definition: color.hh:73
constexpr unsigned Mix(unsigned color1, unsigned color2, unsigned fac1, unsigned fac2, unsigned sum)
Definition: color.hh:62
constexpr std::array< unsigned, 3 > Unpack(unsigned rgb)
Definition: color.hh:28
constexpr unsigned Repack(std::array< unsigned, 3 > rgb)
Definition: color.hh:38
unsigned ParseColorName(std::string_view s)
Definition: color.cc:828