tabla poner pasteles paleta letras las hexadecimales como colores color codigo cambiar c# algorithm rgb

c# - poner - tabla de colores html pdf



Algoritmo: ¿Cómo me desvanezco de Rojo a Verde a través de Amarillo usando valores RGB? (12)

Aquí hay una interpolación lineal muy simple de los componentes de color. Podría servir a sus necesidades.

public Color GetBlendedColor(int percentage) { if (percentage < 50) return Interpolate(Color.Red, Color.Yellow, percentage / 50.0); return Interpolate(Color.Yellow, Color.Lime, (percentage - 50) / 50.0); } private Color Interpolate(Color color1, Color color2, double fraction) { double r = Interpolate(color1.R, color2.R, fraction); double g = Interpolate(color1.G, color2.G, fraction); double b = Interpolate(color1.B, color2.B, fraction); return Color.FromArgb((int)Math.Round(r), (int)Math.Round(g), (int)Math.Round(b)); } private double Interpolate(double d1, double d2, double fraction) { return d1 + (d2 - d1) * fraction; }

Quiero mostrar un color basado en un valor de 0 a 100. En un extremo (100), es rojo puro, el otro extremo (0), verde puro. En el medio (50), quiero que sea amarillo.

Y quiero que los colores se desvanezcan gradualmente de uno a otro, de modo que a los 75, el color sea mitad rojo y mitad amarillo, etc.

¿Cómo programo los valores RGB para reflejar este desvanecimiento? Gracias.


Asigné valores de velocidad de CPU entre 1400 MHz y 3500 MHz a valores de rgb () para obtener desde verde -> amarillo -> rojo con esta función

function green_yellow_red(core_MHz, core_id){ var core_color = ~~core_MHz.map(1400, 3500, 0, 510) if(core_color < 255){ $(''#cpu_core_''+core_id).css(''background'', ''rgb(''+core_color+'',255 , 0)'') }else{ core_color-=255 $(''#cpu_core_''+core_id).css(''background'', ''rgb(255 ,''+ (255-core_color) +'', 0)'') } }


Después de experimentar por un tiempo con colores más realistas, esta es mi fórmula:

public Color GetColorOf(double value, double minValue, double maxValue) { if (value == 0 || minValue == maxValue) return Color.White; var g = (int)(240 * value / maxValue); var r = (int)(240 * value / minValue); return (value > 0 ? Color.FromArgb(240 - g, 255 - (int)(g * ((255 - 155) / 240.0)), 240 - g) : Color.FromArgb(255 - (int)(r * ((255 - 230) / 240.0)), 240 - r, 240 - r)); }

  • No obtiene ningún fondo (es decir Color.White) para 0 (o NULL), o cuando min = max.
  • Para todos los valores positivos, obtiene un color verde distribuido uniformemente entre RGB (240, 255, 240) y RGB (0, 155, 0).
  • Para todos los valores negativos, obtiene un color rojo distribuido uniformemente entre RGB (255, 240, 240) y RGB (230, 0, 0).


Eche un vistazo a LinearGradientBrush . Debe ser una implementación completa de lo que estás buscando.



Escribí una extensión Swift 4 para UIColor que convierte un porcentaje (0-100) en un UIColor de rojo a verde.

Actualmente lo estoy usando para barras de progreso en una aplicación de análisis. Aquí hay un ejemplo:

let myNewColor = UIColor().greenRedProgress(percent: Int))

Aquí está la extensión:

extension UIColor{ func greenRedProgress(percent: Int) -> UIColor{ let modVal = CGFloat((Double(percent).truncatingRemainder(dividingBy: 50) / 50) * 255) if percent <= 0{ return UIColor(red: 1.0, green: 0, blue: 0, alpha: 1) }else if percent >= 100{ return UIColor(red: 0, green: 1.0, blue: 0, alpha: 1) }else{ switch percent{ case 1..<50: return UIColor(red: 1.0, green: (modVal/255), blue: 0, alpha: 1) case 51..<100: return UIColor(red: (255 - modVal)/255, green: 1.0, blue: 0, alpha: 1) case 50: return UIColor(red: 1.0, green: 1.0, blue: 0, alpha: 1) default: return UIColor(red: 0, green: 1.0, blue: 0, alpha: 1) } } }}


Los valores RGB para los colores:

  • Rojo 255, 0, 0
  • Amarillo 255, 255, 0
  • Verde 0, 255, 0

Entre Rojo y Amarillo, igualmente espacio sus adiciones al canal verde hasta que llegue a 255. Entre amarillo y verde, igualmente espacio sus sustracciones del canal rojo.


Método de extensión simplificado;

public static Color Interpolate(this Color source, Color target, double percent) { var r = (byte)(source.R + (target.R - source.R) * percent); var g = (byte)(source.G + (target.G - source.G) * percent); var b = (byte)(source.B + (target.B - source.B) * percent); return Color.FromArgb(255, r, g, b); }

Uso;

var low = 33.0; var high = 100.0; var color = Color.Red.Interpolate(Color.Green, low / high);


Necesitaba algo similar hoy. La entrada fue por ciento de 0.0 a 1.0 y la salida de rojo a verde. Implementación basada en la respuesta de jterrace:

Color percentToColor(float percent) { if (percent<0 || percent>1) { return Color.Black; } int r, g; if (percent<0.5) { r=255; g = (int)(255*percent/0.5); //closer to 0.5, closer to yellow (255,255,0) } else { g=255; r = 255 - (int)(255*(percent-0.5)/0.5); //closer to 1.0, closer to green (0,255,0) } return Color.FromArgb(r, g, 0); }


No sé C #, por lo que esta respuesta es solo un enfoque sugerido. Deje x denotar el int que va de 0 a 100 . Algo como esto debería funcionar:

red = (x > 50 ? 1-2*(x-50)/100.0 : 1.0); green = (x > 50 ? 1.0 : 2*x/100.0); blue = 0.0

La idea es comenzar en rojo: (1.0,0.0,0.0) . Luego aumente el verde para obtener amarillo: (1.0,1.0,0.0) . Luego disminuya el rojo para ponerse verde: (0.0,1.0,0.0) .

Editar: Aquí está el código en C #

static Color GetColorFromRedYellowGreenGradient(double percentage) { var red = (percentage > 50 ? 1 - 2 * (percentage - 50) / 100.0 : 1.0) * 255; var green = (percentage > 50 ? 1.0 : 2 * percentage / 100.0) * 255; var blue = 0.0; Color result = Color.FromArgb((int)red, (int)green, (int)blue); return result; }


Tenía la misma necesidad y acabo de resolver con esto:

myColor = new Color(2.0f * x, 2.0f * (1 - x), 0);

Explicación: En lugar del rango [0-255], centrémonos en el rango [0.0-1.0] para los componentes de color:

  • Verde = 0.0, 1.0, 0.0
  • Amarillo = 1.0, 1.0, 0.0
  • Rojo = 1.0, 0.0, 0.0

Si solo escala el componente verde de 0.0 (en un extremo) a 1.0 (en el otro extremo) y hace lo mismo con el componente rojo (pero retrocede), obtendrá una distribución de color fea y no uniforme.

Para que se vea bien, podríamos escribir mucho código, o podríamos ser más inteligentes.

Si observa cuidadosamente los componentes individuales, verá que podemos dividir el rango en dos partes iguales: en el primero aumentamos el componente rojo de 0.0 a 1.0, dejando el verde en 1.0 y el azul en 0.0; en el segundo, disminuimos el componente verde, dejando los otros 2 tal como están. Podemos aprovechar el hecho de que cualquier valor superior a 1.0 se leerá como 1.0, al máximo nuestros valores para simplificar el código. Suponiendo que su valor de x va de 0.00 (0%) a 1.00 (100%), puede multiplicarlo por 2 para que supere el límite de 1.0 para los componentes de color. Ahora tiene sus componentes pasando de 0.0 a 2.0 (el rojo) y de 2.0 a 0.0 (el rojo). Deje que se recorten en rangos [0.0-1.0] y listo.

Si su x se mueve en otro rango (como [0-100]), debe elegir un factor apropiado en lugar de 2


solo necesitas crear una función con parámetro entero

  • la entrada 100 devolverá RGB (100, 0, 0)
  • la entrada 50 devolverá RGB (50, 50, 0)
  • la entrada 0 devolverá RGB (0, 100, 0)
  • la entrada 99 devolverá RGB (99, 1, 0)
  • la entrada 98 devolverá RGB (98, 2, 0)
  • la entrada 2 devolverá RGB (2, 98, 0)
  • la entrada 1 devolverá RGB (1, 99, 0)

    private Color fader(int v){ return Color.FromArgb(v, 100-v, 0); }