2016-11-27 200 views
2

我创建图像的原始图像,供用户选择。我想要的形象来改变其颜色,一旦用户点击它javafx图像颜色变化

FileInputStream seats_fileInputStream = new FileInputStream("seat.png"); 
Image seats_image = new Image(seats_fileInputStream,50,50,false,false); 

ImageView[] seats = new ImageView[30]; 

for(int i = 0;i<30;i++){ 
seats[i] = new ImageView(seats_image); 
} 

HBox seatsRaw_hbox[] = new HBox[5]; 
VBox seatsLine_vbox = new VBox(); 

int seatsCount = 0; 
for(int i=0;i<5;i++){ 
    seatsRaw_hbox[i]= new HBox(); 
    for(int j=0;j<6;j++){  
    seatsRaw_hbox[i].getChildren().addAll(seats[seatsCount]); 
    seatsCount++; 
    } 
    seatsLine_vbox.getChildren().add(seatsRaw_hbox[i]); 

      } 

     BorderPane Test = new BorderPane(); 
     Test.setCenter(seatsLine_vbox); 

我试着去改变形象,以绿色,一旦它被点击:

Color targetColor = Color.GREEN; 
    ColorAdjust colorAdjust = new ColorAdjust(); 
    colorAdjust.setSaturation(targetColor.getSaturation()); 
    colorAdjust.setHue(targetColor.getHue()); 
    colorAdjust.setBrightness(targetColor.getBrightness()); 


    seats[0].setOnMouseClicked(e->{ 
     seats[0].setEffect(colorAdjust);  
    }); 

但我不断收到奇怪的颜色

原单图像:

enter image description here

奇怪的结果我得到了一次,我点击:

enter image description here

+1

_“我不断收到奇怪的颜色” _ - 请解释,并提供一些样品。 –

+0

'seat.png'图像又如何显示? – fabian

+0

@JimGarrison我已经编辑问题 – MrRizk

回答

3

您正在使用你的目的的恶劣影响。 ColorAdjust会根据每个像素的当前值改变每个像素的亮度,对比度等。这对于使图片更暗,但不使其变成绿色很有用。

此外,取一个黄色像素的亮度值并且将绿色亮度值加上是没有意义的。在大多数情况下,结果将是最高亮度值。

相反,您可以使用照明效果。这可能适合您的需求。该效果模拟图像前面的(彩色)光源。使用绿色环境光使图像变为绿色。

我做了一个例子:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.effect.Light; 
import javafx.scene.effect.Lighting; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.HBox; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 


public class Main extends Application { 

    @Override 
    public void start(Stage stage) { 
     HBox hbox = new HBox(); 

     ImageView imageView1 = new ImageView(new Image(Main.class.getResourceAsStream("/image.png"))); 
     ImageView imageView2 = new ImageView(new Image(Main.class.getResourceAsStream("/image.png"))); 
     hbox.getChildren().add(imageView1); 
     hbox.getChildren().add(imageView2); 

     Lighting lighting = new Lighting(); 
     lighting.setDiffuseConstant(1.0); 
     lighting.setSpecularConstant(0.0); 
     lighting.setSpecularExponent(0.0); 
     lighting.setSurfaceScale(0.0); 
     lighting.setLight(new Light.Distant(45, 45, Color.GREEN)); 

     imageView2.setEffect(lighting); 

     stage.setScene(new Scene(hbox)); 
     stage.sizeToScene(); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+1

你是天才的男人 – MrRizk