Olá,
Essa parte sim é interessante fazer com JavaFX por causa da estrutura e de seus recursos.
Vou explicar melhor. Todo elemento gráfico do JavaFX herda de nó(Node). Nó tem um atributo que recebe uma subclasse de Effect, que representa feitos a serem aplicados aquele nó.
Aqui você pode ver o efeito em ação:
http://weblogs.java.net/blog/campbell/archive/2009/01/effects_in_java.html
para saber mais sobre efeitos você pode ler essa parte da API:
http://java.sun.com/javafx/1/docs/api/javafx.scene.effect/javafx.scene.effect.Effect.html
Para mostrar uma imagem em JavaFX usamos o ImageView, que tem um atributo image, que recebe uma instância de Image e que, por fim, tem uma url, que recebe uma String. Um exemplo abaixo:
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
Stage{
scene: Scene{
content:[
ImageView{
image: Image{
url: "http://raphaelmarques.files.wordpress.com/2009/07/javafx_logo_color_1.jpg"
}
}
]
}
}
Como todo elemento é filho de nód, logo podemos aplicar efeitos nessa imagem também. Olha o nosso exemplo acima com a adição de um efeito(SepiaTone):
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import javafx.scene.effect.SepiaTone;
Stage{
scene: Scene{
content:[
ImageView{
effect: SepiaTone{
level: .5;
}
image: Image{
url: "http://raphaelmarques.files.wordpress.com/2009/07/javafx_logo_color_1.jpg"
}
}
]
}
}
Para modificar dinamicamente o nível de Sepia, podemos usar o controle Slider do JavaFX e o recurso bind, “amarrando” a variação do Slider ao tom de Sepia. Abaixo fiz isso, mas também usei uma VBox, que dispões os elementos verticalmente:
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import javafx.scene.effect.SepiaTone;
import javafx.scene.layout.VBox;
import javafx.scene.control.Slider;
var cena:Scene;
var slider:Slider;
var imageView:ImageView;
slider = Slider {
max: 1 min: 0
width: bind imageView.image.width
}
imageView = ImageView {
effect: SepiaTone {
level: bind slider.value;
}
image: Image {
url: "http://raphaelmarques.files.wordpress.com/2009/07/javafx_logo_color_1.jpg"
}
}
cena =
Scene {
content: [
VBox {
spacing: 10
content: [
slider,
imageView
]
}
]
}
Stage {
scene: cena
}
Nesse ponto já podemos perceber como é fácil aplicar os efeitos no nosso nó sem muito código. Ainda temos as transformações que podemos aplicar.
Boa sorte e nos conte os resultados…