Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1.  
  2. + (NSArray *)rgbToHsv:(NSArray *)rgb {
  3. double r = [[rgb objectAtIndex:0] doubleValue]/255.0;
  4. double g = [[rgb objectAtIndex:1] doubleValue]/255.0;
  5. double b = [[rgb objectAtIndex:2] doubleValue]/255.0;
  6.  
  7. double h,s,v;
  8.  
  9. float min, max, delta;
  10. min = MIN(MIN( r, g), b);
  11. max = MAX(MAX( r, g), b);
  12. v = max; // v
  13. delta = max - min;
  14. if( max != 0 )
  15. s = delta / max; // s
  16. else {
  17. // r = g = b = 0 // s = 0, v is undefined
  18. s = 0;
  19. h = -1;
  20. return [NSArray arrayWithObjects:[NSNumber numberWithDouble:h],[NSNumber numberWithDouble:s],[NSNumber numberWithDouble:v], nil];
  21. }
  22. if( r == max )
  23. h = ( g - b ) / delta; // between yellow & magenta
  24. else if( g == max )
  25. h = 2 + ( b - r ) / delta; // between cyan & yellow
  26. else
  27. h = 4 + ( r - g ) / delta; // between magenta & cyan
  28. h *= 60; // degrees
  29. if( h < 0 )
  30. h += 360;
  31. return [NSArray arrayWithObjects:[NSNumber numberWithDouble:h],[NSNumber numberWithDouble:s],[NSNumber numberWithDouble:v], nil];
  32. }
  33.  
  34. + (NSArray *)hsvToRgb:(NSArray *)hsv {
  35. double h = [[hsv objectAtIndex:0] doubleValue];
  36. double s = [[hsv objectAtIndex:1] doubleValue];
  37. double v = [[hsv objectAtIndex:2] doubleValue];
  38.  
  39. double r,g,b;
  40.  
  41. int i;
  42. float f, p, q, t;
  43. if( s == 0 ) {
  44. // achromatic (grey)
  45. r = g = b = v;
  46. return [NSArray arrayWithObjects:[NSNumber numberWithDouble:r],[NSNumber numberWithDouble:g],[NSNumber numberWithDouble:b], nil];
  47. }
  48. h /= 60; // sector 0 to 5
  49. i = floor( h );
  50. f = h - i; // factorial part of h
  51. p = v * ( 1 - s );
  52. q = v * ( 1 - s * f );
  53. t = v * ( 1 - s * ( 1 - f ) );
  54. switch( i ) {
  55. case 0:
  56. r = v;
  57. g = t;
  58. b = p;
  59. break;
  60. case 1:
  61. r = q;
  62. g = v;
  63. b = p;
  64. break;
  65. case 2:
  66. r = p;
  67. g = v;
  68. b = t;
  69. break;
  70. case 3:
  71. r = p;
  72. g = q;
  73. b = v;
  74. break;
  75. case 4:
  76. r = t;
  77. g = p;
  78. b = v;
  79. break;
  80. default: // case 5:
  81. r = v;
  82. g = p;
  83. b = q;
  84. break;
  85. }
  86. return [NSArray arrayWithObjects:[NSNumber numberWithDouble:r*255],[NSNumber numberWithDouble:g*255],[NSNumber numberWithDouble:b*255], nil];
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement