Pregunta

Tengo un UILabel con el color negro;

estoy escribiendo el siguiente código para obtener los componentes de color de negro.

UIColor *aColor = [aLabel.textColor retain];
const CGFloat* components = CGColorGetComponents(aColor.CGColor);
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();

pero siempre se trata de dar a los componentes de color verde en lugar de componentes de color negro;

¿Está alguno tienen idea acerca de esto?

¿Estoy pasando espacio de color diferente?

:-( me ayude por favor.

¿Fue útil?

Solución

La mayor espacio de color equivocado probable. Creo que el componente alfa del espacio de color en escala de grises lleva a donde cree que el componente verde debe ser.
I utilizar esta función para crear una cadena de UIColor, I único encuentro espacios de color RGB y en escala de grises, así que sólo interpretar cada color con menos de 4 componentes (R + G + B + A) como escala de grises.

if (CGColorGetNumberOfComponents(color.CGColor) < 4) {
    const CGFloat *components = CGColorGetComponents(color.CGColor);
    color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
}
if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
    NSLog(@"no rgb colorspace");
    // do seomthing
}
const CGFloat *components = CGColorGetComponents(color.CGColor);
NSString *colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]];

Por supuesto este método no es ahorrar para todos los casos, se debe adoptar a sus necesidades específicas.

Otros consejos

La razón por la que está viendo lo que parece ser r=0, g=1, b=0, a=0 es porque estás mal interpretando los valores de la matriz devuelta como en un modelo de color RGB. UIColor usos monocromática espacio de color colores en escala de grises como negro en este caso.
Lo que está viendo es un conjunto de componentes 2 de un blanco y negro modelo de color . La primera es nivel de gris (0 para el negro) y el segundo es alfa (1 para opaco). Los dos últimos valores están mirando su están fuera de la final de la matriz elemento 2 y resultan ser 0 en este caso.

Se dará cuenta de si el color es negro y se intenta CGColorGetNumberOfComponents(color.CGColor), devuelve 2. Y si se intenta CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)), devuelve 0 que corresponde a kCGColorSpaceModelMonochrome (véase la enumeración en CGColorSpaceModel CGColorSpace.h)

ver CGColorSpace Referencia

creo que esto es una muy buena manera de obtener la representación RGB de cualquier UIColor *, que ya cuenta con un método de conveniencia para retener Está componentes.

-(CGColorRef)CGColorRefFromUIColor:(UIColor*)newColor {
     CGFloat components[4] = {0.0,0.0,0.0,0.0};
     [newColor getRed:&components[0] green:&components[1] blue:&components[2]        alpha:&components[3]];
     CGColorRef newRGB = CGColorCreate(CGColorSpaceCreateDeviceRGB(), components);
     return newRGB;
}

Una forma de obtener RGB para éstos es dibujando el color en un contexto gráfico y leer la parte de atrás de color. Véase mi respuesta a esta pregunta, por ejemplo, código:

Get RGB valor de UIColor preajustes

ejemplo de trabajo con UIColor: CALayer * btnLayer = [myLittleButton layer];

[layer setBackgroundColor:<#(CGColorRef)#>] se convierte en: [btnLayer setBorderColor:[[UIColor grayColor] CGColor]];

sólo asegúrese de que los botones de colores originales doesnt cubrir la capa

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top