2016-11-27 17 views
2

ユーザーが選択するイメージのrawを作成します。私は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);  
    }); 

しかし、私は奇妙な色

を得続けます

Orginal画像:

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

関連する問題