Esto parece un problema muy interesante para una clase avanzada de Objective-C. Por lo que he visto, no hay soporte nativo para RYB, por lo que necesitaría construir su propia clase derivada de UIColor. Esta clase haría la conversión y pasaría los valores entre su aplicación y la clase nativa. Una posible solución se explica aquí http://stackoverflow.com/questio…
La razón por la que digo que este es un problema interesante es porque probablemente necesitará hacer una optimización seria para reducir el tiempo que lleva hacer la conversión. El retraso podría convertir una gran idea en una experiencia insoportable. [1]
Otra opción sería crear una rueda de color ‘lineal’, que es el otro método utilizado para convertir entre los dos espacios. Lo llamo lineal porque podría crear una tabla con todas las combinaciones (RGB y RYB equivalentes lado a lado) y todo lo que su rutina necesita hacer es una búsqueda, ya sea utilizando el soporte nativo para SQLite o un ad-hoc rutina. Puede usar la solución de Stack Overflow para llenar su tabla, de modo que todos los cálculos se hagan para la aplicación. Sin embargo, esta solución presenta otro problema: la tabla resultante tendría casi 17 millones de registros. La búsqueda tomará un poco de tiempo y su aplicación se hinchará.
- ¿Cómo es la programación para aplicaciones móviles fundamentalmente diferente de la programación para aplicaciones no móviles basadas en Internet?
- ¿Cuánto costaría hacer una aplicación para iPhone como uShip?
- ¿Cómo diseñaría una aplicación móvil para Pac-Manhattan, Pac-Man usando una cuadrícula de calles?
- ¿Es React Native una buena plataforma en comparación con Native en el desarrollo de aplicaciones móviles?
- ¿Cómo funciona Xamarin?
De manera similar, como la primera solución requería optimización, esta requerirá una forma creativa de reducir el tamaño de la tabla de búsqueda, ¿tal vez una simple interpolación?
¡Buena suerte!
[1] Actualización: Encontré las siguientes funciones de JavaScript en este sitio web: http://www.paintassistant.com/ry… No creo que incluso un iPod touch de primera generación tenga problemas para realizar esta función lo suficientemente rápido como para proporcionar un IU muy sensible.
Los valores RYB están restringidos de 0 a 1
Los valores RGB van de 0 a 255
función cubicInt (t, A, B) { var peso = t * t * (3-2 * t); devolver A + peso * (BA); } función getR (iR, iY, iB) { var x0, x1, x2, x3, y0, y1; //rojo var x0 = cubicInt (iB, 1.0, 0.163); var x1 = cubicInt (iB, 1.0, 0.0); var x2 = cubicInt (iB, 1.0, 0.5); var x3 = cubicInt (iB, 1.0, 0.2); var y0 = cubicInt (iY, x0, x1); var y1 = cubicInt (iY, x2, x3); return Math.ceil (255 * cubicInt (iR, y0, y1)); } función getG (iR, iY, iB) { var x0, x1, x2, x3, y0, y1; //verde x0 = cubicInt (iB, 1.0, 0.373); x1 = cubicInt (iB, 1.0, 0.66); x2 = cubicInt (iB, 0.0, 0.0); x3 = cubicInt (iB, 0.5, 0.094); y0 = cubicInt (iY, x0, x1); y1 = cubicInt (iY, x2, x3); return Math.ceil (255 * cubicInt (iR, y0, y1)); } función getB (iR, iY, iB) { var x0, x1, x2, x3, y0, y1; //azul x0 = cubicInt (iB, 1.0, 0.6); x1 = cubicInt (iB, 0.0, 0.2); x2 = cubicInt (iB, 0.0, 0.5); x3 = cubicInt (iB, 0.0, 0.0); y0 = cubicInt (iY, x0, x1); y1 = cubicInt (iY, x2, x3); return Math.ceil (255 * cubicInt (iR, y0, y1)); } función RYB2RGB () { var R = document.all.r0.value; var Y = document.all.y0.value; var B = document.all.b0.value; Si ( isNaN (R) || isNaN (Y) || isNaN (B) || (R 1) || (Y 1) || (B 1) ) { alerta ('valores RYB no válidos'); regreso; } // ---------------------------- var R1 = getR (R, Y, B); var G1 = getG (R, Y, B); var B1 = getB (R, Y, B); // ---------------------------- document.all.r1.innerText = R1; document.all.g1.innerText = G1; document.all.b1.innerText = B1; // ----------------------------- document.getElementById ("colorBox"). style.backgroundColor = "rgb (" + R1 + "," + G1 + "," + B1 + ")"; }