cocoa - pagina - ¿Cómo creo instancias NSColor que coincidan exactamente con aquellas en una maqueta de UI de Photoshop?
hacer pagina web photoshop (3)
¿Has intentado desactivar la gestión del color en Photoshop? Con la administración del color habilitada, los valores reales de píxel RGB mostrados y los reportados por Photoshop pueden no ser los mismos.
El diseñador de mi interfaz de usuario me ofrece excelentes maquetas de interfaz de usuario creadas en Photoshop. Quiero coincidir exactamente con los colores en la maqueta, pero cada vez que creo un color usando el -colorWithCalibratedRed:green:blue:alpha:
de NSColor, los colores no coinciden.
He intentado muestrear los colores de la maqueta de Photoshop usando la aplicación Pixie en / Developer / Applications / Graphics Tools / y copia una definición de NSColor en el portapapeles, pero estos colores no son correctos cuando construyo y ejecuto la aplicación.
Si utilizo los valores que proporciona el selector de color de Photoshop, tampoco son correctos.
Sospecho que esto debe tener algo que ver con el hecho de que estoy muestreando un color calibrado de la pantalla y, por lo tanto, los valores son incorrectos, pero no estoy seguro de cómo solucionar esto.
Si uso -colorWithDeviceRed:green:blue:alpha:
y paso por los valores, parece correcto, pero luego el color no es consistente en otros sistemas.
¿Hay alguna manera de hacer esto de manera confiable?
Gracias, intenté crear un PSD de prueba con valores RGB puros y también creé una aplicación simple con una vista que muestra [NSColor redColor], [NSColor greenColor] y [NSColor blueColor].
Cuando pruebo el PSD (abierto en Photoshop o Vista previa), Pixie me muestra valores puros (por ejemplo, R: 255 G: 0 B: 0 para rojo) pero cuando pruebo mi aplicación, muestra colores no puros, por ejemplo (R: 253 G : 2 B: 30) para [NSColor redColor]. [NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0]
el mismo resultado si uso [NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0]
lugar de [NSColor redColor].
No existe un color RGB "puro" que sea consistente de una pantalla a la siguiente. A menos que trabaje en un espacio de color estandarizado, los números que aparecen para un color en una pantalla probablemente se renderizarán de manera ligeramente diferente en otra.
Haga que su diseñador convierta sus maquetas en un espacio de color estándar como sRGB. Luego puede usar los métodos en NSColor que no solo toman los valores de los componentes sino también el espacio de color en el que se encuentran los componentes; esto te dará colores que deberían verse similares en cualquier pantalla.
En otras palabras, una muestra de color hecha de (R, G, B) = (1.0, 1.0, 1.0) en Photoshop usando sRGB debe verse virtualmente idéntica a una muestra de color dibujada usando un color que se obtiene de esta manera:
NSColorSpace *sRGB = [NSColorSpace sRGBColorSpace];
CGFloat components[3] = { 1.0, 1.0, 1.0 };
NSColor *sRGBRed = [NSColor colorWithColorSpace:sRGB components:&components count:3];
Sin embargo, +[NSColorSpace sRGBColorSpace]
cuenta que +[NSColorSpace sRGBColorSpace]
solo está disponible en Mac OS X 10.5 Leopard y versiones posteriores. Si todavía necesita ejecutar en Tiger, podría escribir una pequeña aplicación de utilidad que se ejecuta en 10.5 y convierte los colores canónicos sRGB en el espacio RGB calibrado:
NSColor *calibratedColor = [sRGBRed colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
Independientemente de si usa sRGB o el espacio calibrado, una vez que tiene un conjunto de colores, puede ponerlos en una NSColorList que escriba en un archivo y luego cargar desde los recursos de su aplicación en tiempo de ejecución.