42 s = (u16)(((u32)delta * 65535 + (mx >> 1)) / mx);
54 u32 numerator = (u32)(
g - b) * 65535;
56 hue_calc = numerator / (6 * delta);
58 hue_calc = numerator / delta / 6;
61 u32 numerator = (u32)(b -
g) * 65535;
63 hue_calc = 65535 - numerator / (6 * delta);
65 hue_calc = 65535 - numerator / delta / 6;
71 i32 signed_diff = (i32)b - (i32)r;
72 u32 sector_offset = 65535 / 3;
74 if (signed_diff >= 0) {
76 u32 numerator = (u32)signed_diff * 65535;
78 hue_calc = sector_offset + numerator / (6 * delta);
80 hue_calc = sector_offset + numerator / delta / 6;
84 u32 numerator = (u32)(-signed_diff) * 65535;
86 hue_calc = sector_offset - numerator / (6 * delta);
88 hue_calc = sector_offset - numerator / delta / 6;
94 i32 signed_diff = (i32)r - (i32)
g;
95 u32 sector_offset = (2 * 65535) / 3;
97 if (signed_diff >= 0) {
99 u32 numerator = (u32)signed_diff * 65535;
101 hue_calc = sector_offset + numerator / (6 * delta);
103 hue_calc = sector_offset + numerator / delta / 6;
107 u32 numerator = (u32)(-signed_diff) * 65535;
109 hue_calc = sector_offset - numerator / (6 * delta);
111 hue_calc = sector_offset - numerator / delta / 6;
116 h = (u16)(hue_calc & 0xFFFF);
119 return HSV16{h, s, v};