- From: Alexey Ardov via GitHub <sysbot+gh@w3.org>
- Date: Wed, 14 Feb 2024 23:45:05 +0000
- To: public-css-archive@w3.org
I hope it is the right place to share, excuse me if it is not. I was working on optimizing an OKLCH gamut mapping algorithm for a while. After some experimenting, I took a geometrical approach with a look-up table and it works nicely. ### Results according to my benchmarks - It works ~30x faster than binary search in detecting the maximum ะก for given L and H. - The quality of results is also great. The maximum error in chroma is just 0.0172 (`#feffe6` vs `#ffffda`) - It even detects out-of-gamut OKLCH color ~2x faster than converting it to RGB and checking values - It works with any RGB-based gamut ### The algorithm The slice of OKLCH looks almost like a triangle. If we could estimate the shape of the slice we could easily find the maximum chroma. To approximate the shape well enough we need just two values: 1. Position of the most chromatic color (the tip of the "triangle") 2. Radius of the arc to describe the bright side of the "triangle"  Knowing these values is enough to approximate the shape: - The dark side from 0 luminance to the most chromatic color is always a triangle by definition - And the bright side is approximated with the arc. All that is left is generating a look-up table with those values and we are ready to go. The current version of the code is [here](https://github.com/ardov/color-lab/tree/main/src/pages/calculations/algorithms/curvature). It is still a work in progress, just wanted to share the idea of the algorithm. -- GitHub Notification of comment by ardov Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/9449#issuecomment-1945045761 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Wednesday, 14 February 2024 23:45:08 UTC