¿Por qué no utilizar CGContextSetFillColorWithColor
? Luego puede pasar el objeto CGColor directamente en lugar de extraer sus componentes y asumir que está en el mismo espacio de color que el contexto.
Editado para agregar:
esto funciona
CGContextSetFillColor(context, CGColorGetComponents([UIColor blueColor].CGColor));
pero esta
CGContextSetFillColor(context, CGColorGetComponents([UIColor whiteColor].CGColor));
resultados en Sin relleno que se producen (incluso se puede ver otras cosas que dibujé en el CGContext a través de él).
Como mencioné, esta forma de configurar el color de relleno supone que el color está en el mismo espacio de color que el contexto.
Normalmente, la mayoría de los CGContexts están en un espacio de color RGB. whiteColor
, por otro lado, es casi seguro en un espacio de color blanco, que tiene solo uno o dos componentes (blanco y alfa).
Por lo tanto, dado que el contexto está en un espacio de color RGB, CGContextSetFillColor
espera que pasen tres o cuatro componentes (rojo, verde, azul y alfa). Cuando obtiene los componentes del CGColor whiteColor
, obtiene un puntero a una matriz C que contiene solo dos componentes. CGContextSetFillColor
leerá los tres o cuatro componentes que quiera sin importar qué; si pasa menos, puede encontrar basura después de ellos, o puede encontrar ceros.
Si encuentra un cero en la posición alfa, el resultado es que ha establecido el color de relleno entre amarillo (rojo = 1.0, verde = 1.0, azul = 0.0) y blanco (los tres = 1.0) con cero alfa Eso es lo que hace que el relleno no se muestre: se está llenando con un color transparente.
El problema es que hay una falta de coincidencia entre el espacio de color en el que se encuentra el contexto (con tres o cuatro componentes) y el espacio de color en el que está el color (con uno o dos componentes). La solución es eliminar la falta de coincidencia, que es lo que CGContextSetFillColorWithColor
hace: Dado que está pasando todo el objeto CGColor, no solo una matriz de números, Core Graphics podrá establecer el espacio de color del contexto al del objeto de color e interpretar el los componentes del objeto de color correctamente.
¡Impresionante, gracias! 'CGContextSetFillColorWithColor (context, [UIColor whiteColor] .CGColor);' –
gran explicación gracias –
Gran explicación, muy útil. – CVertex