41 s = (u16)(((u32)delta * 65535 + (mx >> 1)) / mx);
53 u32 numerator = (u32)(g - b) * 65535;
55 hue_calc = numerator / (6 * delta);
57 hue_calc = numerator / delta / 6;
60 u32 numerator = (u32)(b - g) * 65535;
62 hue_calc = 65535 - numerator / (6 * delta);
64 hue_calc = 65535 - numerator / delta / 6;
70 i32 signed_diff = (i32)b - (i32)r;
71 u32 sector_offset = 65535 / 3;
73 if (signed_diff >= 0) {
75 u32 numerator = (u32)signed_diff * 65535;
77 hue_calc = sector_offset + numerator / (6 * delta);
79 hue_calc = sector_offset + numerator / delta / 6;
83 u32 numerator = (u32)(-signed_diff) * 65535;
85 hue_calc = sector_offset - numerator / (6 * delta);
87 hue_calc = sector_offset - numerator / delta / 6;
93 i32 signed_diff = (i32)r - (i32)g;
94 u32 sector_offset = (2 * 65535) / 3;
96 if (signed_diff >= 0) {
98 u32 numerator = (u32)signed_diff * 65535;
100 hue_calc = sector_offset + numerator / (6 * delta);
102 hue_calc = sector_offset + numerator / delta / 6;
106 u32 numerator = (u32)(-signed_diff) * 65535;
108 hue_calc = sector_offset - numerator / (6 * delta);
110 hue_calc = sector_offset - numerator / delta / 6;
115 h = (u16)(hue_calc & 0xFFFF);
118 return HSV16{h, s, v};