chromatic 0.0.2

A small utility library for building and sampling colour maps.
Documentation
# Chromatic

Chromatic is a Rust library for building and sampling colour maps with perceptually uniform interpolation. It provides a flexible, type-safe way to work with various colour representations and create smooth transitions between colours.

## Features

- Multiple colour space representations:
  - Basic colour types: `Rgb`, `Rgba`, `Grey`, `GreyAlpha`
  - Perceptually uniform colour types: `LabRgb`, `LabRgba` (using CIE Lab colour space)
- Flexible `ColourMap` for interpolation between multiple colours
- Perceptually uniform colour mixing with Lab colour space
- Type-safe conversions between colour spaces
- String parsing and formatting (hex notation and comma-separated values)
- Generic implementation with `Float` trait support

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
chromatic = "0.1.0"
```

## Examples

### Creating and Using Colors

```rust
use chromatic::{Rgb, Rgba, LabRgb, Grey, Colour};

// Create RGB colours
let red = Rgb::new(1.0, 0.0, 0.0);
let blue = Rgb::new(0.0, 0.0, 1.0);

// Create with alpha
let transparent_green = Rgba::new(0.0, 1.0, 0.0, 0.5);

// Parse from string (hex notation)
let purple = Rgb::<f32>::from_str("#800080").unwrap();

// Convert between colour spaces
let grey = red.to_grey();
let lab_red = red.to_lab_rgb(); // Better for interpolation
```

### Creating a Color Map

```rust
use chromatic::{ColourMap, Rgb};

// Create colours
let red = Rgb::new(1.0, 0.0, 0.0);
let green = Rgb::new(0.0, 1.0, 0.0);
let blue = Rgb::new(0.0, 0.0, 1.0);

// Create a colour map with positions
let colours = vec![red, green, blue];
let positions = vec![0.0, 0.5, 1.0];
let colour_map = ColourMap::new(&colours, &positions);

// Sample the colour map
let middle = colour_map.sample(0.25); // Returns a colour between red and green
```

### Using Perceptually Uniform Interpolation

```rust
use chromatic::{LabRgb, Colour};

// Create colours in Lab space for better interpolation
let yellow = LabRgb::new(1.0, 1.0, 0.0);
let blue = LabRgb::new(0.0, 0.0, 1.0);

// Interpolate in Lab colour space (perceptually uniform)
let mixed = LabRgb::lerp(&yellow, &blue, 0.5);
```