Java 有没有办法改变Gif的速度
我想尝试以gif速度保存,可能会打开一个带有速度选择的框,尽管我不太确定如何使用java更改gif速度 我查过了,但没用。我是新来的,所以如果这是一个问题,我很抱歉,我只是没有找到它Java 有没有办法改变Gif的速度,java,gif,Java,Gif,我想尝试以gif速度保存,可能会打开一个带有速度选择的框,尽管我不太确定如何使用java更改gif速度 我查过了,但没用。我是新来的,所以如果这是一个问题,我很抱歉,我只是没有找到它 import base.AnimationExporter; import java.awt.Dimension; import java.awt.Graphics; import settings.GuiDrawer; public class SaveButton extends GuiElement {
import base.AnimationExporter;
import java.awt.Dimension;
import java.awt.Graphics;
import settings.GuiDrawer;
public class SaveButton extends GuiElement
{
public SaveButton(GuiMenu parent)
{
super(parent);
}
public void releasedOn(int posX, int posY, int button)
{
if (heldDown) {
heldDown = false;
AnimationExporter.saveAnimation(true);
}
}
}
编辑:我的坏heres AnimationExporter
try {
ImageWriter gifWriter = (ImageWriter)ImageIO.getImageWritersByFormatName("gif").next();
ImageOutputStream outputStream = ImageIO.createImageOutputStream(outputFile);
gifWriter.setOutput(outputStream);
ImageTypeSpecifier imageType = ImageTypeSpecifier.createFromBufferedImageType(2);
IIOMetadata metadata = gifWriter.getDefaultImageMetadata(imageType, null);
IIOMetadataNode nodeTree = (IIOMetadataNode)metadata.getAsTree(metadata.getNativeMetadataFormatName());
IIOMetadataNode appExtensionsNode = getNode("ApplicationExtensions", nodeTree);
IIOMetadataNode child = new IIOMetadataNode("ApplicationExtension");
child.setAttribute("applicationID", "NETSCAPE");
child.setAttribute("authenticationCode", "2.0");
child.setUserObject(new byte[] { 1, (byte)((Editing.animationLoop ? 0 : 1) & 0xFF), (byte)((Editing.animationLoop ? 0 : 1) >> 8 & 0xFF) });
appExtensionsNode.appendChild(child);
metadata.setFromTree(metadata.getNativeMetadataFormatName(), nodeTree);
gifWriter.prepareWriteSequence(null);
for (Frame frame : animation.Animation.frames) {
IIOMetadata imageMetadata = gifWriter.getDefaultImageMetadata(imageType, null);
IIOMetadataNode imageNodeTree = (IIOMetadataNode)imageMetadata.getAsTree(imageMetadata.getNativeMetadataFormatName());
IIOMetadataNode graphicNode = getNode("GraphicControlExtension", imageNodeTree);
graphicNode.setAttribute("disposalMethod", "none");
graphicNode.setAttribute("userInputFlag", "FALSE");
graphicNode.setAttribute("delayTime", Integer.toString(delay));
imageMetadata.setFromTree(imageMetadata.getNativeMetadataFormatName(), imageNodeTree);
IIOImage currentImage = new IIOImage(frame.getEntireFrame(), null, imageMetadata);
gifWriter.writeToSequence(currentImage, null);
}
gifWriter.endWriteSequence();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}```
“GIF”的帧速率已嵌入。但是,您可以通过外部工具加快或减慢速度。Photoshop可能工作得最好。这个工具也许能帮助你。如果您需要动态帧速率更改,我们需要有关您正在使用的库的更多信息。啊,很抱歉,我以为我没有那么多的复制下来,现在看着它我觉得很傻,
delayTime
这是
public int delay=Editing.frameDelay代码>
我假设frameDelay
是我应该改变的
publicstaticintframedelay=100
既不是base.AnimationExporter也不是settings.GuiDrawer
都是Java API类,它们的包名是非描述性的,所以我们不知道它们是什么。因此,不清楚您在这里询问的是什么。请将您的代码发布为我们可以用来重现您的问题的。您发布的代码不完整,但也包含许多不相关的部分。也就是说,`graphicNode.setAttribute(“delayTime”,Integer.toString(delay));`?这似乎是关键所在。