Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- + (NSArray *)rgbToHsv:(NSArray *)rgb {
- double r = [[rgb objectAtIndex:0] doubleValue]/255.0;
- double g = [[rgb objectAtIndex:1] doubleValue]/255.0;
- double b = [[rgb objectAtIndex:2] doubleValue]/255.0;
- double h,s,v;
- float min, max, delta;
- min = MIN(MIN( r, g), b);
- max = MAX(MAX( r, g), b);
- v = max; // v
- delta = max - min;
- if( max != 0 )
- s = delta / max; // s
- else {
- // r = g = b = 0 // s = 0, v is undefined
- s = 0;
- h = -1;
- return [NSArray arrayWithObjects:[NSNumber numberWithDouble:h],[NSNumber numberWithDouble:s],[NSNumber numberWithDouble:v], nil];
- }
- if( r == max )
- h = ( g - b ) / delta; // between yellow & magenta
- else if( g == max )
- h = 2 + ( b - r ) / delta; // between cyan & yellow
- else
- h = 4 + ( r - g ) / delta; // between magenta & cyan
- h *= 60; // degrees
- if( h < 0 )
- h += 360;
- return [NSArray arrayWithObjects:[NSNumber numberWithDouble:h],[NSNumber numberWithDouble:s],[NSNumber numberWithDouble:v], nil];
- }
- + (NSArray *)hsvToRgb:(NSArray *)hsv {
- double h = [[hsv objectAtIndex:0] doubleValue];
- double s = [[hsv objectAtIndex:1] doubleValue];
- double v = [[hsv objectAtIndex:2] doubleValue];
- double r,g,b;
- int i;
- float f, p, q, t;
- if( s == 0 ) {
- // achromatic (grey)
- r = g = b = v;
- return [NSArray arrayWithObjects:[NSNumber numberWithDouble:r],[NSNumber numberWithDouble:g],[NSNumber numberWithDouble:b], nil];
- }
- h /= 60; // sector 0 to 5
- i = floor( h );
- f = h - i; // factorial part of h
- p = v * ( 1 - s );
- q = v * ( 1 - s * f );
- t = v * ( 1 - s * ( 1 - f ) );
- switch( i ) {
- case 0:
- r = v;
- g = t;
- b = p;
- break;
- case 1:
- r = q;
- g = v;
- b = p;
- break;
- case 2:
- r = p;
- g = v;
- b = t;
- break;
- case 3:
- r = p;
- g = q;
- b = v;
- break;
- case 4:
- r = t;
- g = p;
- b = v;
- break;
- default: // case 5:
- r = v;
- g = p;
- b = q;
- break;
- }
- return [NSArray arrayWithObjects:[NSNumber numberWithDouble:r*255],[NSNumber numberWithDouble:g*255],[NSNumber numberWithDouble:b*255], nil];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement