- From: Natalie Weizenbaum via GitHub <sysbot+gh@w3.org>
- Date: Fri, 18 Sep 2020 20:42:37 +0000
- To: public-css-archive@w3.org
nex3 has just created a new issue for https://github.com/w3c/csswg-drafts: == [css-color-4] Some example HWB-to-RGB translations are incorrect == In [section 8.3](https://drafts.csswg.org/css-color-4/#hwb-examples), some of the example RGB color values that correspond to HWB colors appear to be incorrect. For example, `hwb(0, 100%, 20%)` is translated to `#d4d5d5` when in fact (because `whiteness + blackness > 100%`) it should be the grayscale value `#d5d5d5`. I think this is caused by floating-point rounding errors. If you naively normalize the input arguments and pass them to the [`hwbToRgb`](https://www.w3.org/TR/css-color-4/#hwb-to-rgb) function, you get: ``` hwbToRgb(0, 1/1.2, 0.2/1.2) = [0.8333333333333333, 0.8333333333333334, 0.8333333333333334] hwbToRgb(0, 1/1.2, 0.2/1.2).map(c => c * 255) = [212.49999999999997, 212.5, 212.5] hwbToRgb(0, 1/1.2, 0.2/1.2).map(c => c * 255).map(Math.round) = [212, 213, 213] ``` This is because floating-point inaccuracies cause the term `1 - white - black` to return `-5.551115123125783e-17` rather than `0`, so the `hslToRgb()` result's red channel isn't fully canceled out and ends up skewing the result. In pure math, though, the correct channel values would all be `212.5` which would all round to `213`, producing the color `#d5d5d5`. It may be worth solving this issue for implementers who copy the `hwbToRgb()` function by including the whiteness/blackness normalization logic in the function itself: ```js function hwbToRgb(hue, white, black) { if (white + black >= 1) { var gray = white / (white + black); return [gray, gray, gray]; } var rgb = hslToRgb(hue, 1, .5); for(var i = 0; i < 3; i++) { rgb[i] *= (1 - white - black); rgb[i] += white; } return rgb; } ``` Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/5531 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Friday, 18 September 2020 20:42:39 UTC