2

我试图从一个叫做帝国时代的旧游戏中渲染一个动画 gif ......并且 gif 奇怪地用黑色而不是透明呈现...... gif 是来自http://ageofempiresgif.altervista.org/en/的任何 gif存档.php

4

1 回答 1

3

已复制问题

我可以在我的机器(Java8b111、Win7、ATI Radeon HD 4600)上复制帝国时代 gif 的错误渲染。

黑色骑士

JavaFX 问题跟踪器中跟踪的问题

问题是RT-23233 GIF 帧的背景不正确(需要登录,但任何人都可以注册并在提供的链接上查看问题详细信息)。该问题计划在 Java 8 发布后实施。

原因是 JavaFX 严格遵守 gif 规范,而大多数 gif 呈现实现(例如所有常见的浏览器)更宽松,因此以不同的方式呈现图像(“正确”)。链接的 RT-23233 请求放宽 JavaFX gif 渲染器的实现,以便正确渲染诸如帝国时代 gif 之类的 gif。

仅使用 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 中呈现的示例页面

火狐图片

于 2013-10-24T17:49:48.080 回答