#pragma once
#include <cmath>
#include "common.hpp"
typedef struct rgb_s {
unsigned char r, g, b;
unsigned char dist(const rgb_s&) const;
double fdist(const rgb_s&) const;
unsigned rgb() const { return ((unsigned)r << 16) + ((unsigned)g << 8) + (unsigned)b; }
void tint(const rgb_s&, unsigned char alpha); // alpha in %
bool operator==(const rgb_s& o) const { return memcmp(this, &o, sizeof(rgb_s)) == 0; }
bool operator<(const rgb_s& o) const { return memcmp(this, &o, sizeof(rgb_s)) < 0; }
} rgb_t;
// https://en.wikipedia.org/wiki/Color_difference
// https://de.wikipedia.org/wiki/Lab-Farbraum
// https://de.wikipedia.org/wiki/Delta_E
typedef struct lab_s {
double l, a, b;
lab_s(const rgb_t& rgb);
double dist(const lab_s& o) const;
} lab_t;