#ifndef ACCENT_EXTRACT_CANDIDATES_H #define ACCENT_EXTRACT_CANDIDATES_H #include #include #include "colour.h" #include "arena.h" typedef struct { RGB colour; Oklab lab; double red_sum; double green_sum; double blue_sum; double prevalence; } ColourCluster; typedef struct { ColourCluster *items; size_t count; size_t capacity; double merge_distance; Arena arena; } CandidateSet; typedef struct { RGB colour; double prevalence; float score; } ScoredCandidate; void candidates_init(CandidateSet *set); void candidates_destroy(CandidateSet *set); bool candidates_add(CandidateSet *set, RGB colour, double prevalence); /* Results are owned by set and remain valid until candidates_destroy(). */ bool candidates_rank(CandidateSet *set, size_t limit, RGB background, float minimum_score, ScoredCandidate **results, size_t *result_count); void candidates_tweak(ScoredCandidate *results, size_t result_count, RGB background); #endif