w3schools values how color code java colors rgb gradient

java - values - w3 color gradient



Generando degradados programáticamente? (5)

Usando las clases básicas de AWT, podrías hacer algo como esto:

import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import javax.swing.JPanel; public class LinearGradient extends JPanel { public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; Color color1 = Color.RED; Color color2 = Color.BLUE; int steps = 30; int rectWidth = 10; int rectHeight = 10; for (int i = 0; i < steps; i++) { float ratio = (float) i / (float) steps; int red = (int) (color2.getRed() * ratio + color1.getRed() * (1 - ratio)); int green = (int) (color2.getGreen() * ratio + color1.getGreen() * (1 - ratio)); int blue = (int) (color2.getBlue() * ratio + color1.getBlue() * (1 - ratio)); Color stepColor = new Color(red, green, blue); Rectangle2D rect2D = new Rectangle2D.Float(rectWidth * i, 0, rectWidth, rectHeight); g2.setPaint(stepColor); g2.fill(rect2D); } } }

Dado 2 colores rgb y un área rectangular, me gustaría generar un degradado lineal básico entre los colores. Hice una búsqueda rápida y lo único que he podido encontrar es esta entrada en el blog , pero parece que falta el código de ejemplo, o al menos fue a partir de esta publicación. Cualquier cosa ayuda, algoritmos, ejemplos de código, lo que sea. Esto se escribirá en Java, pero la capa de visualización ya está solucionada, solo tengo que averiguar cómo averiguar qué mostrar.


He estado usando RMagick para eso . Si necesita ir más allá del gradiente simple, ImageMagick y uno de sus contenedores (como RMagick o JMagick para Java) podrían ser útiles.


Puedes usar la clase construida en GradientPaint .

void Paint(Graphics2D g, Regtangle r, Color c1, Color c2) { GradientPaint gp = new GradientPaint(0,0,c1,r.getWidth(),r.getHeight(),c2); g.setPaint(gp); g.fill(rect); }


quieres una interpolación entre el primer y el segundo color. La interpolación de colores es fácil al calcular la misma interpolación para cada uno de sus componentes (R, G, B). Hay muchas formas de interpolar. Lo más fácil es usar interpolación lineal: simplemente tome el porcentaje p del primer color y el porcentaje 1 - p del segundo:

R = firstCol.R * p + secondCol.R * (1 - p)

Hay otra pregunta relacionada con esto.

Hay otros métodos de interpolación que a veces funcionan mejor. Por ejemplo, usar una función de interpolación en forma de campana (sigmoidal) hace que la transición sea más suave.

/ EDITAR: Ups, te refieres a usar una función predefinida. OK, incluso más fácil. La publicación del blog que vinculó ahora tiene un código de ejemplo en Python.

En Java, puede usar GradientPaint .


Siguiendo con la respuesta ejemplar de David Crow, aquí hay una implementación de ejemplo de Kotlin

fun gradientColor(x: Double, minX: Double, maxX: Double, from: Color = Color.RED, to: Color = Color.GREEN): Color { val range = maxX - minX val p = (x - minX) / range return Color( from.red * p + to.red * (1 - p), from.green * p + to.green * (1 - p), from.blue * p + to.blue * (1 - p), 1.0 ) }