2013-08-08 12 views
1

에서 이미지의 색상을 변경하려면 어떻게 이런 PNG 이미지가자바 FX

enter image description here

을 어떻게 할 수 JavaFX에서이 작업을 수행합니까?

+0

smurfette 당신이 [벡터 모양을] 하시겠습니까 (http://docs.oracle.com/javafx/2/api/javafx/scene/shape/Shape.html) 또는 [비트 맵 이미지] (http://docs.oracle.com/javafx/2/api/javafx/scene/image/Image.html)? – jewelsea

+0

글쎄, 내 게임 엔진에이 기능을 사용하고 싶기 때문에 더 빠르다. 런타임시 이미지에서 모양을 만들고 싶습니다. 따라서 빠른 접근이 필요합니다. – Eeliya

답변

19

벡터 모양이거나 비트 맵인지 상관하지 않으므로 여기서 비트 맵을 사용하여 솔루션을 설명합니다. 실제로 벡터 모양을 원한다면 좋은 결과를 얻으려면 벡터 입력으로 작업해야한다고 생각합니다.


최소 (-1)로 설정된 밝기로 ColorAdjust 효과를 사용하십시오. SPEED에 대한 결과를 캐시하십시오. 여기

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(); 
    } 
} 

는, 화상의 색상을 조정 그녀 홍당무 있도록 스머페트 가리키면 다른 샘플이다 : 여기

speed

이미지의 그림자의 윤곽을 생성하는 샘플이다. blushing smurfette

import javafx.application.Application; 
import javafx.beans.binding.Bindings; 
import javafx.scene.*; 
import javafx.scene.effect.*; 
import javafx.scene.image.*; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class Shadow extends Application { 
    @Override 
    public void start(Stage stage) throws Exception { 
     Image image = new Image(
       "http://icons.iconarchive.com/icons/designbolts/smurfs-movie/128/smurfette-icon.png" 
     ); 

     ImageView imageView = new ImageView(image); 
     imageView.setClip(new ImageView(image)); 

     ColorAdjust monochrome = new ColorAdjust(); 
     monochrome.setSaturation(-1.0); 

     Blend blush = new Blend(
       BlendMode.MULTIPLY, 
       monochrome, 
       new ColorInput(
         0, 
         0, 
         imageView.getImage().getWidth(), 
         imageView.getImage().getHeight(), 
         Color.RED 
       ) 
     ); 

     imageView.effectProperty().bind(
       Bindings 
        .when(imageView.hoverProperty()) 
         .then((Effect) blush) 
         .otherwise((Effect) null) 
     ); 

     imageView.setCache(true); 
     imageView.setCacheHint(CacheHint.SPEED); 

     stage.setScene(new Scene(new Group(imageView), Color.AQUA)); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     Application.launch(); 
    } 
} 
+0

코드에 감사하지만 정확히 내가 원하는 것은 아닙니다. 나는 모양을 그 때 나는 모양의 색깔을 바꿀 수있다. 나는 내 질문을 업데이트했다. – Eeliya

+1

색 변경을 포함하도록 답변이 업데이트되었습니다. 제발 더 구체적인 질문을 할 때, 감사합니다 :-) – jewelsea

+0

답변 주셔서 감사합니다, 내 주요 질문은 이미지에서 모양을 만드는 방법입니다. 이것은 좋은 해결 방법이지만 내 주요 질문은 여전히 ​​대답없이 남아 있습니다. 나는이 문제를 해결하려고 노력한다. – Eeliya