gpt4 book ai didi

java - 为什么 gif 动画在 paintComponent() 中使用时没有动画?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:34 26 4
gpt4 key购买 nike

我正在使用 paintComponent()JPanel 的背景上绘制一个 gif 动画图像。它显示了 gif 但没有动画。我使用 java 1.5,我知道我可以使用带图标的标签。

有没有人知道为什么以及如何修复它?

    private static class CirclePanel extends JPanel {

ImageIcon imageIcon = new ImageIcon(BarcodeModel.class.getResource("verify.gif"));
Point point = f.getLocation();
protected void paintComponent(Graphics g) {
Graphics gc = g.create();
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
g2d.setColor(Color.BLUE);
g2d.drawImage(imageIcon.getImage(), getWidth() / 2, getHeight() / 2, null);
g2d.drawRect(0, 0, getWidth(), getHeight());
g2d.setStroke(new BasicStroke(10f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER));
g2d.setFont(g.getFont().deriveFont(Font.BOLD | Font.ITALIC,15f));
g2d.drawString("Wait Please ...",getWidth()/2-imageIcon.getIconHeight()/3,getHeight()/2+imageIcon.getIconHeight()+15);

g2d.dispose();

}

这是gif图片。
enter image description here

已编辑:只需将图像观察器添加到 g2d.drawImage() 方法。

 g2d.drawImage(imageIcon.getImage(), getWidth() / 2, getHeight() / 2, this);

最佳答案

原因是标准的 Java ImageIO API 只加载 gif 的第一张图像。怎么修? Google for a Gif Loader for Java,它加载 gif 的每个图像。然后你必须在正确的时间绘制正确的图像。另一种方法是让不同的 png 文件每次代表动画的一个帧。

更新: 好吧......实际上,在做了一些研究之后,看起来你做的方式实际上加载了动画 gif 的所有帧。原因是 ImageIcon 的方法 getImage() 总是返回第一张图像。

要修复它,你可以试试这个(我不确定它是否有效......)

不使用 Grahpics.drawImage(),而是使用 ImageIcon.paintIcon()。像这样:

imageIcon.paintIcon(this, g2d, getWidth() / 2 - imageIcon.getIconWidth() / 2, getHeight() / 2);

关于java - 为什么 gif 动画在 paintComponent() 中使用时没有动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11648696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com