【问题标题】:.getScaledInstance working with animated GIFs.getScaledInstance 处理动画 GIF
【发布时间】:2017-02-12 01:35:41
【问题描述】:

像这样导入图像时,我使用.getScaledInstance 轻松缩放图像:

player_sprite = a_1.getImage().getScaledInstance(150, 150, 100);

但是对于缩放动画 GIF 就不能这样说,因为当我使用相同的方法缩放 GIF 时,它会在显示它时引起问题。当使用g.drawImage 时,它只绘制第一帧然后消失。

这是导入我使用的 GIF 的完整代码,下面将是我如何将动画 GIF 显示到 JFrame 的示例:

导入:

    ImageIcon a_1 = new ImageIcon(FrontHand.class.getResource("/Sprites/character_move_down.gif"));
    move_player_down = a_1.getImage().getScaledInstance(100, 100, 100);

显示它:

    g.drawImage(move_player_down, 100, 100, this);

我可以使用另一种简单的方法来增加动画 GIF 的大小,或者是否有解决此问题的简单方法。

【问题讨论】:

  • GIF 的缩放比例应该与其他文件格式没有什么不同,除非您专门讨论的是 animated GIF。如果是这样,您可能希望将这些关键信息放在您的问题中。
  • 1.将100 作为getScaledInstance 的最后一个参数传入没有意义。 2. 你真的需要缩放的instance吗?你不能把它画得更大吗(使用适当的drawImage 调用,或者可能是转换后的Graphics2D?3. 你真的需要在你的程序中缩放它吗?你不能使用一个外部工具来创建具有所需大小的图像?获得动画 gif 的缩放实例似乎非常困难。这个stackoverflow.com/q/9392227 基本上是重复的,但答案看起来非常繁琐......编辑@HovercraftFullOfEels “绘制第一帧”
  • 不知道有什么不同会更新它:)
  • 在我的情况下,我无法重新创建更大的 gif
  • @Taka 提示:回复评论时,使用@ 将通知相应用户(如recently discussed on meta

标签: java swing jframe gif animated-gif


【解决方案1】:

我在进入 scalr 时找到了一个解决方案,我没有以 scalr 结束,而是在一个 scalr 线程上找到了一条评论,该线程使用 .getscaledinstance 更改大小,然后使用paintIcon 打印而不是像这样的 drawImage:

大小变化:

ImageIcon a_1 = new ImageIcon(FrontHand.class.getResource("/Sprites/character_move_down.gif"));
a_1.setImage(a_1.getImage().getScaledInstance(150, 150, Image.SCALE_DEFAULT));
move_player_down = a_1;

绘制图标:

move_player_down.paintIcon(this, g, 100, 100);

它就像一个魅力,不需要我改变我以前的所有代码来解决它:)

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2021-04-28
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多