我快速又肮脏地使用javafx编写了一个非常小的图像幻灯片演示应用程序,以在我的Raspberry Pi Zero W上运行。在此应用程序中,我使用FadeTransition来处理图像。一切正常,但不幸的是,它的速度很慢,因此淡入淡出过渡看起来不流畅(fps太低)。
首先,我将vRam增加到128Mb(之前我也尝试过256Mb)。然后,我以各种组合使用这些参数:
-Dprism.forceGPU = true
-Dprism.order = j2d,sw
-Dsun.java2d.opengl = true
我什至将pi超频到1100Mhz。但是问题仍然存在,过渡效果仍然很慢。
我还尝试了在没有lightdm的情况下运行我的应用程序,因为我在互联网上多次阅读了Java能够直接写入显示缓冲区的信息。但是我无法让应用程序以这种方式运行。
您是否知道是否可以在树莓派零号上平稳运行?
非常感谢您!
我的Java代码的片段:
FileInputStream input = null;
FadeTransition fadeIn = new FadeTransition(Duration.millis(transitionTime * 1000 / 2), imageView);
fadeIn.setFromValue(0);
fadeIn.setToValue(1.0);
fadeIn.setInterpolator(Interpolator.LINEAR);
FadeTransition fadeOut = new FadeTransition(Duration.millis(transitionTime * 1000 / 2), imageView);
fadeOut.setFromValue(1.0);
fadeOut.setToValue(0);
fadeOut.setInterpolator(Interpolator.LINEAR);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
long currentTime = System.currentTimeMillis();
if (currentTime > lastRefreshTime + showingTimePerImage * 1000) {
File file = getNewRandomFileFromFolder();
input = new FileInputStream(file.getAbsolutePath());
Image image = new Image(input);
fadeOut.setOnFinished(new EventHandler < ActionEvent > () {
@Override
public void handle(ActionEvent arg0) {
imageView.setImage(image);
imageView.setPreserveRatio(true);
imageView.fitHeightProperty().bind(primaryStage.heightProperty());
fadeIn.play();
}
});
fadeOut.play();
lastRefreshTime = currentTime;
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}