Tengo un PNG imagen como esta:

Cómo cambiar el color de la imagen en JavaFX

Quiero cambiar de imagen a algo como esto:

Cómo cambiar el color de la imagen en JavaFX

¿Cómo puedo hacer esto en JavaFX?

  • ¿Quieres un forma de vector o imagen de mapa de bits?
  • Bueno, alguien que es más rápido, porque quiero utilizar esta característica para mi el motor de juego. Quiero crear una forma de imagen en tiempo de ejecución. Por lo que necesita para ser rápido enfoque.
InformationsquelleAutor Eeliya | 2013-08-08

2 Comentarios

  1. 24

    Como que no te importa si es una forma vectorial o de mapa de bits, voy a esbozar soluciones mediante el uso de un mapa de bits aquí. Si en realidad quería una forma de vector, creo que tendría que trabajar con el vector de entrada para obtener un buen resultado.


    Utilizar un ColorAdjust efecto con el brillo al mínimo (-1).
    Almacenar en caché el resultado de la VELOCIDAD.

    Cómo cambiar el color de la imagen en JavaFX

    Aquí es un ejemplo que crea una sombra de contorno de una imagen:

    import javafx.application.Application;
    import javafx.scene.*;
    import javafx.scene.effect.ColorAdjust;
    import javafx.scene.image.*;
    import javafx.stage.Stage;
    
    public class Shadow extends Application {
        @Override 
        public void start(Stage stage) throws Exception {
            ImageView imageView = new ImageView(
                new Image(
                    "http://i.stack.imgur.com/jbT1H.png"
                )
            );
    
            ColorAdjust blackout = new ColorAdjust();
            blackout.setBrightness(-1.0);
    
            imageView.setEffect(blackout);
            imageView.setCache(true);
            imageView.setCacheHint(CacheHint.SPEED);
    
            stage.setScene(new Scene(new Group(imageView)));
            stage.show();
        }
    
        public static void main(String[] args) {
            Application.launch();
        }
    }

    Aquí es otra muestra de que ajusta el color de una imagen, mantenga el mouse sobre pitufina para hacer su rubor.

    Cómo cambiar el color de la imagen en JavaFX
    Cómo cambiar el color de la imagen en JavaFX

    • Gracias por el código, pero no es exactamente lo que quiero. Yo de una forma, entonces soy capaz de cambiar el color de la forma. He actualizado mi pregunta.
    • Respuesta actualizada para incluir un cambio de color. Por favor, ser más específico al hacer preguntas, gracias 🙂
    • Gracias por responder, mi pregunta principal es cómo crear una forma de imagen. esta es una buena solución, pero mi principal pregunta que aún permanecen sin respuesta. Yo trato de resolver mi problema con esta solución.
  2. 2

    El código de abajo, va a reemplazar un píxel de color con otro. Si ejecuta que varias veces sobre la imagen original sustitución de la escala de grises de valores con los valores de color que se debe configurar.
    Para ahorrar memoria que usted quiera adaptar el código a la reutilización de la escritura de la imagen para cada bucle.

    /**
    * reColor the given InputImage to the given color
    * inspired by https://stackoverflow.com/a/12945629/1497139
    * @param inputImage
    * @param oldColor
    * @param newColor 
    * @return reColored Image
    * 
    */
    public static Image reColor(Image inputImage, Color oldColor, Color newColor) {
    int W = (int) inputImage.getWidth();
    int H = (int) inputImage.getHeight();
    WritableImage outputImage = new WritableImage(W, H);
    PixelReader reader = inputImage.getPixelReader();
    PixelWriter writer = outputImage.getPixelWriter();
    int ob=(int) oldColor.getBlue()*255;
    int or=(int) oldColor.getRed()*255;
    int og=(int) oldColor.getGreen()*255;
    int nb=(int) newColor.getBlue()*255;
    int nr=(int) newColor.getRed()*255;
    int ng=(int) newColor.getGreen()*255;
    for (int y = 0; y < H; y++) {
    for (int x = 0; x < W; x++) {
    int argb = reader.getArgb(x, y);
    int a = (argb >> 24) & 0xFF;
    int r = (argb >> 16) & 0xFF;
    int g = (argb >>  8) & 0xFF;
    int b =  argb        & 0xFF;
    if (g==og && r==or && b==ob) {
    r=nr;
    g=ng;
    b=nb;
    }
    argb = (a << 24) | (r << 16) | (g << 8) | b;
    writer.setArgb(x, y, argb);
    }
    }
    return outputImage;
    }
    • Gracias @Wolfgang Fahl, esto funcionó para mi requisito. +1
    • Gracias – también se puede cambiar la opacidad de esta manera si usted compare también el argumento
    • Ok Gracias por permitir que saber.

Dejar respuesta

Please enter your comment!
Please enter your name here