Пример #1
0
void	hsv_to_rgb(t_env *e, double p, double q, double t)
{
	double	hh;
	double	ff;
	int		i;

	hh = e->h / 60;
	i = floor(hh);
	ff = hh - i;
	p = e->v * (1.0 - e->s);
	q = e->v * (1.0 - (e->s * ff));
	t = e->v * (e->s * (1.0 - ff));
	p *= 250;
	q *= 250;
	t *= 250;
	(i == 0) ? hsv0(e, p, t) : 1;
	(i == 1) ? hsv1(e, p, q) : 1;
	(i == 2) ? hsv2(e, p, t) : 1;
	(i == 3) ? hsv3(e, p, q) : 1;
	(i == 4) ? hsv4(e, p, t) : 1;
	if (i == 5)
	{
		e->r = e->v;
		e->g = p;
		e->b = q;
	}
}
Пример #2
0
// ---------- begin of function ColorTable::color_dist_hsv --------//
int ColorTable::color_dist_hsv(RGBColor c1, RGBColor c2)
{
	// calculate a distance for the colour
	// h betweeh 0 and 6
	// s between 0 and 1
	// v between 0 and 1
	HSVColor hsv1(rgb2hsv(c1));
	HSVColor hsv2(rgb2hsv(c2));;

	double dx = hsv2.saturation * cos(hsv2.hue * M_PI / 3.0) - hsv1.saturation * cos(hsv1.hue * M_PI / 3.0);
	double dy = hsv2.saturation * sin(hsv2.hue * M_PI / 3.0) - hsv1.saturation * sin(hsv1.hue * M_PI / 3.0);
	double dv = hsv2.brightness - hsv1.brightness;

	return int(10000 * ( dx*dx + dy*dy + dv*dv*BRIGHTNESS_WEIGHTING ));
}