Я быстро и грязно запрограммировал очень маленькое приложение для создания слайд-шоу изображений, используя javafx для запуска на моем Raspberry Pi Zero W. В этом приложении я использую FadeTransition для изображений.Все работает нормально, но у меня, к сожалению, проблема в том, что он довольно медленный, поэтому переходы затухания не выглядят гладкими (слишком низкий fps).
Во-первых, я увеличил vRam до 128 МБ (я также пытался до 256 МБ)Затем я поиграл с этими параметрами в различных комбинациях:
-Dprism.forceGPU = true
-Dprism.order = j2d, sw
-Dsun.java2d.opengl = true
Я даже разогнал пи до 1100 МГц.Но проблема все еще остается, эффекты перехода все еще очень медленные.
Я также пытался запустить свое приложение без 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());
}
}
}
}