After the simple scrolltexts and scrolltexts with a sinusoidal effect, here is just another old bitmap effect used in the demos written for home computers in the 1980s.
For standalone mode
For standalone mode
If you want to try with a bigger image, you can use the glassfish.jpg image instead of the fc-barcelone-logo.jpg and, for a better effect with a bigger image, use this lines
var factor = (6 * Math.PI) / imageHeight; var v = (Math.sin(j * factor) * 20) + 20;instead of this lines
var factor = (2 * Math.PI) / imageHeight; var v = (Math.sin(j * factor) * 10) + 20;
Distortion.fx |
package distortion; import javafx.scene.image.Image; import javafx.geometry.Rectangle2D; import javafx.scene.image.ImageView; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.util.Math; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.runtime.ConditionalFeature; import javafx.runtime.Platform; import javafx.scene.shape.Rectangle; import javafx.scene.paint.Color; /** * @author paddy */ println("Effect enabled: {Platform.isSupported(ConditionalFeature.EFFECT)}"); println("Input Method enabled: {Platform.isSupported(ConditionalFeature.INPUT_METHOD)}"); println("Scene 3D enabled: {Platform.isSupported(ConditionalFeature.SCENE3D)}"); println("Shape Clip enabled: {Platform.isSupported(ConditionalFeature.SHAPE_CLIP)}"); var img = Image { //url: "{__DIR__}images/glassfish.jpg" url: "{__DIR__}images/fc-barcelone-logo.jpg" } def imageWidth = bind img.width as Integer; def imageHeight = bind img.height as Integer; def lineWidth = imageWidth; def lineHeight = 1; var distortionMap: Float[]; var index = 0; for (j in [0..<imageHeight * 2]) { var factor = (2 * Math.PI) / imageHeight; var v = (Math.sin(j * factor) * 10) + 20; //var factor = (6 * Math.PI) / imageHeight; //var v = (Math.sin(j * factor) * 20) + 20; insert v into distortionMap; } def lineViewports = for (row in [0..imageHeight]) { Rectangle2D { minX: 0, minY: row, width: lineWidth, height: lineHeight } } var distortionImg = bind for (row in [0..imageHeight]) { ImageView { x: bind distortionMap[row + index] y: row viewport: bind lineViewports[row] image: img } } var t = Timeline { repeatCount: Timeline.INDEFINITE keyFrames: KeyFrame { time: 8ms canSkip: true action: function (): Void { index = index + 1; if (index > imageHeight) { index = 0; } } } } t.play(); Stage { title: "Application title" scene: Scene { width: imageWidth +40 height: imageHeight + 1 content: [ Rectangle { x: 0, y: 0 width: imageWidth +40 , height: imageHeight + 1 fill: Color.BLACK //fill: Color.GHOSTWHITE } distortionImg ] } }
Note : The scrolltexts and the scrolltexts with sinusoidal effect work without migration on JavaFX 1.3 with AWT/Java2D/Swing toolkit.
On prism toolkit the animation is very fluid but you have to use a jpeg image instead of png for the font because the png is not supported in this early version of prism
On prism toolkit the animation is very fluid but you have to use a jpeg image instead of png for the font because the png is not supported in this early version of prism