Estos dias estuve trabajando en un proyecto personal, donde tengo la necesidad de crear colores en diferentes ColorSpaces, y convertir los colores entre estos diferentes espacios

RGB (Red-Green-Blue)
Gray (Escala de grises)
CMYK (Cyan-Magenta-Yellow_black)
HSB (Hue-Saturation-Brightness)

Para eso cree una clase con una serie de métodos que me facilitaron el trabajo con los diferentes colores.

  1. typedef enum
  2. {
  3. LPRGBColorspace = 0,
  4. LPGRAYColorspace = 1,
  5. LPCMYKColorspace = 2,
  6. LPHSBColorspace = 3
  7. } LPColorspaceType;

En la clase LPColorManager definí tres “grupos” de metodos

//Creacion
Un conjunto de 4 métodos que me permiten crear objetos de tipo UIColor en cualquiera de los espacios de colores.

  1. +(UIColor *)createColorWithRed:(CGFloat)_red green:(CGFloat)_green blue:(CGFloat)_blue alpha:(CGFloat)_alpha;
  2.  
  3. +(UIColor *)createColorWithCyan:(CGFloat)_cyan magent:(CGFloat)_magenta yellow:(CGFloat)_yellow black:(CGFloat)_black alpha:(CGFloat)_alpha;
  4.  
  5. +(UIColor *)createColorWithWhite:(CGFloat)_white alpha:(CGFloat)_alpha;
  6.  
  7. +(UIColor *)createColorWithHue:(CGFloat)_hue saturation:(CGFloat)_saturation brightness:(CGFloat)_brightness alpha:(CGFloat)_alpha;

//Convertir
Partiendo de un color en cualquiera de estos espacios de colores me permiten obtener el mismo color en cualquiera de los otros espacios

  1. +(UIColor *)getColor:(UIColor*)_color inColorSpace:(LPColorspaceType)_colorSpace;
  2. +(UIColor *)convertToGray:(UIColor *)_color;
  3. +(UIColor *)convertToCMYK:(UIColor *)_color;
  4. +(UIColor *)convertToHSB:(UIColor *)_color;
  5. +(UIColor *)convertToRGB:(UIColor *)_color;

//Obtener componentes
Estos métodos me permiten obtener los valores de cada unos de los componentes del color para cada uno de los diferentes espacios de color.
En caso de ser necesario, internamente se realiza la conversion al espacio de color necesario.

  1. +(void)getRed:(float *)_red green:(float *)_green blue:(float *)_blue alpha:(float *)_red fromColor:(UIColor *)_color;
  2.  
  3. +(void)getWhite:(float *)_white alpha:(float *)_alpha fromColor:(UIColor *)_color;
  4.  
  5. +(void)getHue:(float *)_hue saturation:(float *)_saturation brightness:(float *)_brightness alpha:(float *)_red fromColor:(UIColor *)_color;
  6.  
  7. +(void)getCyan:(float *)_cyan magent:(float *)_magent yellow:(float *)_yellow black:(float *)_black alpha:(float *)_alpha fromColor:(UIColor *)_color;

Otras notas:

  • Todos los parámetros para los componentes de los colores son valores decimales dentro del rango 0..1
  • Probablemente sea útil crear una adición a la clase UIColor
  • HSB no existe dentro de los ColorSpaces de iOS, para eso, cuando creo el objeto UIColor lo hago dentro del espacio RGB, e internamente en el resto de las funciones hago la conversiones necesarias.
Descargar LPColorManager