2009-12-21 16 views

Respuesta

16

por la NSColor documentación:

NSColor *myColor = [NSColor colorWithCalibratedRed:redValue green:greenValue blue:blueValue alpha:1.0f]; 
+3

Debe utilizar 1.0f en lugar de 1,0, tal como 1,0 es un doble, que no es un tipo nativo para el iPhone. – nash

+0

Tiene razón: ¡los peligros de escribir el código rápidamente! –

+4

Probablemente valga la pena aclarar que los valores de color son de 0.0 a 1.0. Además, la versión "calibrada" es, de hecho, la variante correcta de este método. Desea utilizar NSCalibratedRGBColorSpace (que corresponde a [NSColorSpace genericRGBColorSpace]) en todos los tratos internos con los colores. Y solo use las variantes de espacios de color del "dispositivo" cuando se envía a un dispositivo específico conocido. – Kelan

3
float red = 0.5f; 
float green = 0.2f; 
float blue = 0.4f; 
float alpha = 0.8f; 

NSColor *rgb = [NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; 
8

También no se olvide de hacer lo siguiente conversión de los valores RGB reales que obtiene, digamos desde Photoshop ...

RGB de (226, 226, 226) se pueden crear instancias como NSColor usando los valores:

Red: 226/255 = 0.886... 
Green: 226/255 = 0.886... 
Blue: 226/255 = 0.886... 

[NSColor colorWithDeviceRed:0.886f green:0.886f blue:0.886f alpha:1.0f]; 

¿Por qué 255? Los canales de color de 8 bits varían de 0 a 255 (inclusive). Cuando se normaliza, se escala al rango [0,1] (inclusive). Consulte las referencias de conversiones de valores normalizados a valores no normalizados y viceversa.

Referencias

+2

Esto puede ser obvio para todos los demás, pero ¿por qué el +1? ¿Es solo porque 256 es un número más agradable para dividir con, más factores, por lo tanto, menos errores de redondeo/puntos decimales? –

+0

Esta respuesta es un poco incorrecta. Los valores del componente de color RGB de 8 bits oscilan entre 0 y 255, que son 256 valores en total. Por lo tanto, la forma correcta de asignar valores RGB que van de 0 a 1 es dividir por 255, es decir: 'rojo = 226/255'. Agregar el aspecto torpe 1 y dividir por 256 da resultados muy similares pero ligeramente incorrectos, que puede verificar considerando lo que sucedería si un componente de color fuera 0: cero dividido por 255 sigue siendo cero, pero '(0 + 1)/256'> 0. – davidf2281

-2

extensión para Swift 2

extension NSObject { 
    func RGB(r:CGFloat, g:CGFloat, b:CGFloat, alpha:CGFloat? = 1) -> NSColor { 
     return NSColor(red: r/255, green: g/255, blue: b/255, alpha: alpha!) 
    } 
} 

A continuación, sólo llamar

RGB(r: 16, g: 105, b: 125) 

o

RGB(r: 16, g: 105, b: 125, alpha: 0.5) 
+0

¿Por qué crear una extensión de NSObject y no de NSColor? – ColdGrub1384

+0

Prefiero simplemente escribir RGB (... – emreoktem

+0

pero si crea una extensión de NSObject, debe llamar a la función de esta manera: NSObject().RGB (_ :, g :, b :) o cualquier subclase de NSObject – ColdGrub1384

Cuestiones relacionadas