Exemple #1
0
/* Normalizes the text in @fmap and stores the result in @state's buffer.
 * Returns number of characters written to buffer. */
size_t text_normalize_map(struct text_norm_state *state, fmap_t *map, size_t offset)
{
	const unsigned char *map_loc;
	unsigned int map_pgsz;
	uint64_t map_len;
	size_t buff_len;
	size_t acc;
	size_t acc_total;
	size_t acc_len;

	map_len = map->len;
	map_pgsz = map->pgsz;
	buff_len = state->out_len;

	acc_total = 0;
	acc = 0;

	while (1) {
		/* Break out if we've reached the end of the map or our buffer. */
		if(!(acc_len = MIN_3(map_pgsz, map_len - offset, buff_len - acc_total))) break;

		/* If map_loc is NULL, then there's nothing left to do but recover. */
		if(!(map_loc = fmap_need_off_once(map, offset, acc_len))) break;
		offset += acc_len;

		/* If we didn't normalize anything, no need to update values, just break out. */
		if(!(acc = text_normalize_buffer(state, map_loc, acc_len))) break;
		acc_total += acc;
	}

	return acc_total;
}
HSV RGB2HSV(RGBf rgb){
	HSV hsv;
	float min, max, delta;
	
	int r, g, b;

	r = rgb.r;
	g = rgb.g;
	b = rgb.b;
		
	min = MIN_3(r, g, b);
	max = MAX_3(r, g, b);
	hsv.v = max; // v
	
	delta = max - min;

	if(delta == 0){

		hsv.h = 0;
		hsv.s = 0;
		hsv.v = hsv.v / 255.0;
		
		return hsv;
	}

	if( max != 0 ) {
		hsv.s = delta / max; // s
	} else {
		// r = g = b = 0 // s = 0, v is undefined
		hsv.s = 0;
		hsv.h = -1;
		return hsv;
	}

	if( r == max )
		hsv.h = ( g - b ) / delta; // between yellow & magenta

	else if( g == max )
		hsv.h = 2 + ( b - r ) / delta; // between cyan & yellow

	else
		hsv.h = 4 + ( r - g ) / delta; // between magenta & cyan
	
	hsv.h *= 60; // degrees
	if( hsv.h < 0 )
		hsv.h += 360;

	hsv.s *= 100;
	hsv.v = hsv.v / 255 * 100;

	return hsv;
}