Ejemplo n.º 1
0
int color2rgb(char *str, double rgb[3])
{
	static	hsbcolor_t	*last;
	char				*p,canon[SMALLBUF],buf[BUFSIZ];
	hsbcolor_t			fake;
	double				hsv[3];

	if ((last == NULL)||(last->name[0] != str[0])||(strcmp(last->name,str))) {
		fake.name = canoncolor(str,canon);
		last = (hsbcolor_t*) bsearch((void*)&fake,(void*)color_lib,sizeof(color_lib)/sizeof(hsbcolor_t),sizeof(fake),(bsearch_cmpf)colorcmpf);
	}
	if (last == NULL) {
		if (isdigit(canon[0]) == FALSE) return 0;
		else {
			for (p = buf; (*p = *str++); p++) if (*p == ',') *p = ' ';
			sscanf(buf,"%lf%lf%lf",&hsv[0],&hsv[1],&hsv[2]);
		}
	}
	else {
		hsv[0] = ((double)last->h)/255;
		hsv[1] = ((double)last->s)/255;
		hsv[2] = ((double)last->b)/255;
	}
	hsv2rgb(&rgb[0],&rgb[1],&rgb[2],hsv[0],hsv[1],hsv[2]);
	return 1;
}
Ejemplo n.º 2
0
char *colorxlate(char *str, char *buf)
{
    static hsbcolor_t *last;
    unsigned char canon[128];
    char *p;
    hsbcolor_t fake;

    if ((last == NULL) || (last->name[0] != str[0])
	|| (strcmp(last->name, str))) {
	fake.name = (char *) canoncolor(str, canon);
	last =
	    (hsbcolor_t *) bsearch(&fake, color_lib,
				   sizeof(color_lib) / sizeof(hsbcolor_t),
				   sizeof(fake), colorcmpf);
    }
    if (last == NULL) {
	if (isdigit(canon[0]) == FALSE) {
	    fprintf(stderr, "warning: %s is not a known color\n", str);
	    strcpy(buf, str);
	} else
	    for (p = buf; (*p = *str++); p++)
		if (*p == ',')
		    *p = ' ';
    } else
	sprintf(buf, "%.3f %.3f %.3f", ((double) last->h) / 255,
		((double) last->s) / 255, ((double) last->b) / 255);
    return buf;
}