# Convert sRGB to Okhsl/Okhsv (Oklab-based) perceptual color space
A simple Rust implementation of Okhsl and Okhsv color conversion routines based on the reference implementation in the [blog post](https://bottosson.github.io/posts/colorpicker/).
Okhsl and Okhsv color spaces are meant to have more orhogonal hue, saturation, and lightness than the basic HSL/HSV colors.
## API
```rust
use okhsl::*;
let lab = Oklab::from(Rgb {r: 1, g: 127, b: 255});
let Oklab {l, a, b} = lab;
let hsv = Okhsv::from(lab);
let Okhsv {h, s, v} = hsv;
let lab = hsv.to_oklab();
let rgb = hsv.to_srgb();
```
Oklab components are floats. `l` is in range 0 to 1, and `a`/`b` are small numbers that *can be negative*.
Okhsv/Okhsl components are floats. HSL values are approximately in range 0 to 1 (inclusive). You can expect to roundtrip `Okhsl`⇔`Oklab` and `Okhsv`⇔`Oklab` with little loss of precision.
## Examples
[Usage examples](https://gitlab.com/kornelski/oklab/-/tree/main/okhsl/examples)
```bash
cargo run -r --example invert -- some_image.jpeg
```