2016-11-27 202 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