JavaFX | 그래픽 특수 효과 | 흐림(Blur) 효과


셰이프에는 시각 효과를 위한 기능도 포함되어 있다. 시각 효과라고 하면 무슨 뜻인지 알기 어렵겠지만, 예를 들면 ‘흐림’등이 대표적이다.

시각 효과는 shape(Node의 서브 클래스)에 포함되어 있는 “setEffect"라는 메소드를 사용하여 설정한다. 이것은 다음과 같이 실행한다.

"Node".setEffect("Effect");

인수에는 시각 효과의 내용을 나타내는 “Effect"라는 클래스 (또는 그 서브 클래스)의 인스턴스를 지정한다. 시각 효과는 많은 것이 제공되어 있으며, 그것들은 모두 Effect 클래스의 서브 클래스로 사용할 수 있다.

흐림 관계된 시각 효과 클래스로는 다음과 같은 것들이 있다. 또한 생성자는 시각 효과를 표현하는데 필요한 설정 값 인수에 대해 설명하겠다.

Gaussian Blur

new GaussianBlur(반경)

Gaussian Blur는 가우스 곡선을 이용하여 흐림 효과를 내는 것이다. 넓은 범위에 흐림을 매끄럽게 적용할 시에 사용된다. 인수에는 흐름 반경이 되는 실수를 지정한다.

Motion Blur

new MotionBlur(각도, 반경)

Motion Blur는 고속으로 이동하는 모습을 촬영한 것 같은 흐림 효과를 내는 것이다. 인수에는 흐림 방향을 나타내는 각도와 흐림의 강도를 나타내는 반경을 각각 실수로 지정한다.

Box Blur

new BoxBlur(폭, 높이, 반복)

Box Blur는 인접 픽셀의 평균값을 바탕으로 흐림 효과를 내는 것이다. 인수는 박스의 가로 폭과 높이, 시각 효과의 반복 수를 지정한다. 폭과 높이는 double 값, 반복 수는 int 값이다.

간단한 사용 예는 다음과 같다.

public void createShape(Pane root){
    for(int i = 0;i < 10;i++){
        Rectangle r = new Rectangle(20, 20, 50, 50);
        r.setTranslateX(25 * i);
        r.setTranslateY(15 * i);
        r.setFill(Color.BLUE);
        r.setStroke(Color.RED);
        r.setStrokeWidth(5);
        r.setEffect(new GaussianBlur(2.0 * i));
        root.getChildren().add(r);
    }
}

소스 코드를 실행해 보면 조금씩 Gaussian Blur으로 흐림 효과를 강화하게 사각형을 그려간다.