Si desea cambiar todos los colores, intente con una función de rotación (desplazamiento o adición) en lugar de una función de inversión (inversión). En otras palabras, considere que el rango de 0 a 255 para cada color (rojo, verde y azul) debe envolverse, conectado en las puntas como un círculo de valores. Luego cambie cada color alrededor del círculo agregando algún valor y haciendo el mod 256. Por ejemplo, si su valor inicial para rojo es 255 y agrega 1, obtiene 0. Si cambia los tres colores por 128, se vuelve dramáticamente diferente valores para cada color original en la imagen, incluso los grises. Gris 127, 127, 127 se vuelve blanco 255, 255, 255. Gris 128, 128, 128 se vuelve negro 0, 0, 0. Hay un efecto fotográfico como el llamado Solarización, descubierto por casualidad por Man Ray en la década de 1930.
También puede realizar operaciones de rotación en cada color (rojo, verde, azul) en una cantidad diferente para realmente estropear una imagen.
También puede realizar operaciones de rotación en el tono, cambiando el tono de cada color original en cierta cantidad en el círculo de tono, que altera todos los colores sin alterar el brillo, por lo que las sombras se ven como sombras, haciendo que las personas se vean Simpsons o Smurphs por ejemplo.
El código para un cambio en un 128 podría parecer:
public static Color Invert(this Color c) => Color.FromArgb(c.R.Invert(), c.G.Invert(), c.B.Invert());
public static byte Invert(this byte b) {
unchecked {
return (byte)(b + 128);
}
}
En realidad, esa * es * la forma en que se suele definir la inversión de un color ... ¿qué estás buscando en su lugar? –
¿Qué pasa si mi color es 127, 127, 127, pasando por mi función no lo invertiría .. – ThePower
Tal vez necesita generar un color de fondo que sea legible en su color? –