Java 透明背景的gif有问题
我在使用透明背景显示gif时遇到问题,因为当我启动此程序时,gif会显示,但gif的所有图片都保留在画布上。有人知道一些解决办法吗 这是我的代码:Java 透明背景的gif有问题,java,graphics,awt,gif,transparent,Java,Graphics,Awt,Gif,Transparent,我在使用透明背景显示gif时遇到问题,因为当我启动此程序时,gif会显示,但gif的所有图片都保留在画布上。有人知道一些解决办法吗 这是我的代码: package zkouska3; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.swing.I
package zkouska3;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class mainl extends JFrame{
private Image TestImage;
private BufferedImage bf;
public static void main(String[] args) {
new mainl();
}
public mainl() {
setSize(500, 500);
imageLoader();
setVisible(true);
}
public void imageLoader() {
try {
TestImage = new ImageIcon(this.getClass().getResource("pandulak.gif")).getImage();
}catch(Exception e) {
}
}
@Override
public void paint(Graphics g){
g.drawImage(TestImage, 0, 0, 300, 300, this);
}
}
您已经覆盖了
JFrame
中的paint
方法。这意味着JFrame
本身不再被绘制(或者更简单地说,图像的背景永远不会被绘制)。在上面绘制图像的paint
方法中插入对super.paint(g)
的调用,以便每次新的gif图像显示时,背景都会绘制到上一个gif图像上:
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(TestImage, 0, 0, 300, 300, this);
}
这是另一个
您的gif是disposition=3
,这意味着它在增量渲染时需要上一幅图像。问题是图像背景是黑色而不是白色
以下是可能的处置:
if (disposal==0) s="no animation";
else if (disposal==1) s="leave image as is";
else if (disposal==2) s="clear with background";
else if (disposal==3) s="restore previous image";
else s="reserved";
当我使用解码器渲染它时,它看起来如下所示:
[![capture][1]][1]
因此,这里有两个可能的因素:
[1] :我的猜测是,您必须使用“dispose方法”,它基本上告诉gif渲染器在每个帧之间应该做什么(以增量方式添加或清除它们)。您可以查看,我刚刚在本地尝试了这两种情况,通过您的代码+我的修改,它可以按预期工作(使用透明背景的.gif)。我还重现了您在不调用
super.paint(g)时遇到的问题代码>。