Blob Blame Raw


#include "trop.h"
#include "hsvutil.h"

void OLDRGB2HSV(double r, double g, double b,
				double *h, double *s, double *v)
{
	double max, min;
	double delta;

	max = tmax(r, g, b);
	min = tmin(r, g, b);

	*v = max;

	if (max != 0)
		*s = (max - min) / max;
	else
		*s = 0;

	if (*s == 0)
		*h = 0;
	else {
		delta = max - min;

		if (r == max)
			*h = (g - b) / delta;
		else if (g == max)
			*h = 2 + (b - r) / delta;
		else if (b == max)
			*h = 4 + (r - g) / delta;
		*h = *h * 60;
		if (*h < 0)
			*h += 360;
	}
}

void OLDHSV2RGB(double hue, double sat, double value,
				double *red, double *green, double *blue)
{
	int i;
	double p, q, t, f;

	//  if (hue > 360 || hue < 0)
	//    hue=0;
	if (hue > 360)
		hue -= ((int)hue / 360) * 360;
	//hue-=360;
	if (hue < 0)
		hue += (1 - (int)hue / 360) * 360;
	//hue+=360;
	if (sat < 0)
		sat = 0;
	if (sat > 1)
		sat = 1;
	if (value < 0)
		value = 0;
	if (value > 1)
		value = 1;
	if (sat == 0) {
		*red = value;
		*green = value;
		*blue = value;
	} else {
		if (hue == 360)
			hue = 0;

		hue = hue / 60;
		i = (int)hue;
		f = hue - i;
		p = value * (1 - sat);
		q = value * (1 - (sat * f));
		t = value * (1 - (sat * (1 - f)));

		switch (i) {
			CASE 0 :
				*red = value;
			*green = t;
			*blue = p;
			CASE 1 :
				*red = q;
			*green = value;
			*blue = p;
			CASE 2 :
				*red = p;
			*green = value;
			*blue = t;
			CASE 3 :
				*red = p;
			*green = q;
			*blue = value;
			CASE 4 :
				*red = t;
			*green = p;
			*blue = value;
			CASE 5 :
				*red = value;
			*green = p;
			*blue = q;
		}
	}
}