/************************************************************************* * Copyright (c) 2014 AT&T Intellectual Property * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-v10.html * * Contributors: Details at https://graphviz.org *************************************************************************/ #pragma once struct rgb_struct { double r, g, b;/* 0 to 255 */ }; typedef struct rgb_struct color_rgb; struct xyz_struct { double x, y, z; }; typedef struct xyz_struct color_xyz; struct lab_struct { double l, a, b; ///< l: 0 to 100, a,b: -128 to 128 }; typedef struct lab_struct color_lab; color_xyz RGB2XYZ(color_rgb color); color_rgb XYZ2RGB(color_xyz color); color_lab RGB2LAB(color_rgb color); void LAB2RGB_real_01(double *color); /* convert an array[3] of LAB colors to RGB between 0 to 1, in place */ color_rgb LAB2RGB(color_lab color); color_rgb color_rgb_init(double r, double g, double b); color_xyz color_xyz_init(double x, double y, double z); color_lab color_lab_init(double l, double a, double b); QuadTree lab_gamut_quadtree( const int *lightness, int max_qtree_level); ///< construct a quadtree of the LAB gamut points double *lab_gamut(const int *lightness, int *n); ///< give a list of n points in the file defining ///< the LAB color gamut /** derive around maxpoints from a color list * * \param color_list List of the form "#ff0000,#00ff00,..." * \param maxpoints Maximum number of points to return * \return An array of size [maxpoints*3] of the form {{l,a,b},...} */ double *color_blend_rgb2lab(const char *color_list, const int maxpoints);