Изображение Javafx не отображается должным образом
Я пытался сделать анимированный GIF-файл из старой игры под названием Age Of Empires... и GIF-файл выглядит странно с черным вместо прозрачного... GIF - это любой GIF-файл с http://ageofempiresgif.altervista.org/en/archive.php
1 ответ
Проблема реплицирована
Я могу воспроизвести неверный рендеринг GIF-файлов Age of Empires на моем компьютере (Java8b111, Win7, ATI Radeon HD 4600).
Проблема отслеживается в JavaFX.
Проблема в том, что кадры GIF RT-23233 имеют неправильный фон (требуется регистрация, но любой может зарегистрироваться и по предоставленной ссылке и просмотреть детали проблемы). Выпуск запланирован на реализацию в выпуске Java 8.
Причина в том, что JavaFX строго придерживается спецификации gif, в то время как большинство реализаций рендеринга gif (например, все распространенные браузеры) являются более разрешающими и, таким образом, отображают изображение по-разному ("правильно"). Связанный RT-23233 является запросом для упрощения реализации средства визуализации gif JavaFX, чтобы он правильно отображал изображения, такие как изображения Age of Empires.
Пример программы, которая воспроизводит проблему, просто используя ImageView
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.image.*;
import javafx.stage.Stage;
public class AOE extends Application {
@Override public void start(final Stage stage) throws Exception {
stage.setScene(
new Scene(
new Group(
new ImageView(
new Image(
"http://ageofempiresgif.altervista.org/33995109.gif"
)
)
)
)
);
stage.show();
}
public static void main(String[] args) { launch(AOE.class); }
}
Пример программы, которая воспроизводит проблему, просто используя WebView
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class AoEWebView extends Application {
@Override public void start(final Stage stage) throws Exception {
WebView webView = new WebView();
webView.getEngine().load("http://ageofempiresgif.altervista.org/en/archive.php");
stage.setScene(
new Scene(
new Group(
webView
)
)
);
stage.show();
}
public static void main(String[] args) { launch(AoEWebView.class); }
}
Пример страницы, отображаемой в JavaFX WebView
Пример страницы отображается в Firefox