c# - poner - texto arcoiris instagram
¿Cómo obtengo un gradiente de color de arco iris en C#? (6)
Me gustaría tener una enumeración de colores basada en los colores del arco iris (rojo ... amarillo ... verde ... azul ...).
Veo básicamente dos formas de hacer eso:
Crea una tabla de búsqueda que contenga algunos colores de referencia importantes e interpola entre ellos. No me gusta esta idea en absoluto.
Aplicar algunas matemáticas más o menos sofisticadas. Probablemente menos, pero no veo cómo funciona. ¿Algunas ideas?
(Ah, y mientras hice una investigación SO, no encontré buenos resultados. Si esta pregunta ya se publicó, por favor, indíqueme la ubicación y la eliminaré).
Edición: preferiría tener esta tecnología independiente de la utilizada para mostrar el gradiente. Por ejemplo, algo como GetRainbowColor (float f) con f que varía de 0 (rojo) a 1 (violeta) funcionaría muy bien.
Aquí hay uno que me gusta usar (la salida es un color HTML RGB):
public static String Rainbow(Int32 numOfSteps, Int32 step)
{
var r = 0.0;
var g = 0.0;
var b = 0.0;
var h = (Double)step / numOfSteps;
var i = (Int32)(h * 6);
var f = h * 6.0 - i;
var q = 1 - f;
switch (i % 6)
{
case 0:
r = 1;
g = f;
b = 0;
break;
case 1:
r = q;
g = 1;
b = 0;
break;
case 2:
r = 0;
g = 1;
b = f;
break;
case 3:
r = 0;
g = q;
b = 1;
break;
case 4:
r = f;
g = 0;
b = 1;
break;
case 5:
r = 1;
g = 0;
b = q;
break;
}
return "#" + ((Int32)(r * 255)).ToString("X2") + ((Int32)(g * 255)).ToString("X2") + ((Int32)(b * 255)).ToString("X2");
}
Comience aquí: http://www.midnightkite.com/color.html
Puedes interpretar esto: http://www.physics.sfasu.edu/astro/color/spectra.html es FORTRAN, pero es bastante obvio lo que hace.
Además, puede leer más en profundidad aquí: http://en.wikipedia.org/wiki/CIE_1931_color_space
Aquí hay una versión en Python: http://www.johnny-lin.com/py_code/wavelen2rgb.py
Por cierto, el primer hit de Google para C # es este: http://miguelmoreno.net/sandbox/wavelengthtoRGB/default.aspx
En winforms (o cualquier cosa que use GDI +) puedes usar System.Drawing.Drawing2D.LinearGradientBrush para hacer la interpolación por ti.
System.Windows.Media.GradientBrush de WPF también podría funcionar. Es abstracto, por lo que podría terminar con LinearGradientBrush de WPF. Está en un espacio de nombres diferente al otro.
EDITAR: ya que la pregunta se editó para indicar que desea ser independiente de la tecnología, no creo que se aplique esta respuesta. Voy a dejarlo aquí por ahora en caso de que alguien esté buscando Gradientes en C #, pero si alguien encuentra eso objetable, eliminaré la respuesta.
Hice una comprobación rápida para ver si al menos podría obtener algunas de las funciones de una manera más independiente (como obtener una matriz de Point o algo así). No parece ser el caso.
Esto es más fácil de lo que piensas.
Primero necesita una función de conversión hsv o hsl a rgb. Aquí está el código C # para hacer esa conversión .
Luego, simplemente repita todos los valores posibles del tono h
mientras mantiene la saturation
y la luminosidad constantes.
Si quieres 100 colores del arcoiris espaciados igualmente:
for(double i = 0; i < 1; i+=0.01)
{
ColorRGB c = HSL2RGB(i, 0.5, 0.5);
//do something with the color
}
También puede crear fácilmente la función deseada GetRainbowColor
esta manera agregando todos estos colores a una List<ColorRGB>
y devolviendo el color indexado apropiado.
Me gusta usar esto:
public static Color Rainbow(float progress)
{
float div = (Math.Abs(progress % 1) * 6);
int ascending = (int) ((div % 1) * 255);
int descending = 255 - ascending;
switch ((int) div)
{
case 0:
return Color.FromArgb(255, 255, ascending, 0);
case 1:
return Color.FromArgb(255, descending, 255, 0);
case 2:
return Color.FromArgb(255, 0, 255, ascending);
case 3:
return Color.FromArgb(255, 0, descending, 255);
case 4:
return Color.FromArgb(255, ascending, 0, 255);
default: // case 5:
return Color.FromArgb(255, 255, 0, descending);
}
}
http://colorfulconsole.com/ Permite casi todo lo que está buscando, también se puede instalar como un paquete NuGet. No es exactamente un gradiente de arco iris. Pero puede escribir gradientes en la consola, también esto confunde el IDE entre
Colorful.Console
y
System.Console
Así que asegúrese de definir la consola correcta.