remove zero delay frames from the final result before returning
This commit is contained in:
parent
d99c864402
commit
45ed101fef
|
@ -12,6 +12,7 @@ import javax.imageio.stream.ImageInputStream;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -97,13 +98,8 @@ public class AnimatedGif {
|
||||||
IIOMetadataNode root = (IIOMetadataNode)frameMetadata.getAsTree(frameMetadata.getNativeMetadataFormatName());
|
IIOMetadataNode root = (IIOMetadataNode)frameMetadata.getAsTree(frameMetadata.getNativeMetadataFormatName());
|
||||||
IIOMetadataNode gce = (IIOMetadataNode)root.getElementsByTagName("GraphicControlExtension").item(0);
|
IIOMetadataNode gce = (IIOMetadataNode)root.getElementsByTagName("GraphicControlExtension").item(0);
|
||||||
|
|
||||||
// delay specified as 1/100 of a second (*10 to get in milliseconds).
|
// delay specified as 1/100 of a second (*10 to get in milliseconds). we handle the special zero case
|
||||||
// TODO: zero delay frames are meant as intermediate frames to "prepare" the canvas for the following
|
// after the loop is done, for now treat them as any other frame
|
||||||
// frames (i guess as a way to clear/fill the background for a bunch of upcoming frames which
|
|
||||||
// don't fill the entire canvas?). we probably *do* need to add these (temporarily) to the frames
|
|
||||||
// array so that we guarantee proper disposal method handling, but the final array we return from
|
|
||||||
// this method probably should not include them
|
|
||||||
// More info: http://www.imagemagick.org/Usage/anim_basics/#zero
|
|
||||||
int delay = Integer.valueOf(gce.getAttribute("delayTime"));
|
int delay = Integer.valueOf(gce.getAttribute("delayTime"));
|
||||||
|
|
||||||
String disposal = gce.getAttribute("disposalMethod");
|
String disposal = gce.getAttribute("disposalMethod");
|
||||||
|
@ -164,6 +160,16 @@ public class AnimatedGif {
|
||||||
|
|
||||||
reader.dispose();
|
reader.dispose();
|
||||||
|
|
||||||
|
// remove zero-delay frames, which are just intermediate frames to "prep" the canvas for subsequent frames
|
||||||
|
// (i guess as a way to clear/fill the background for a bunch of upcoming frames which don't fill the entire
|
||||||
|
// canvas? anyway, we don't need them anymore as they aren't meant to be displayed)
|
||||||
|
// More info: http://www.imagemagick.org/Usage/anim_basics/#zero
|
||||||
|
Iterator<ImageFrame> itor = frames.iterator();
|
||||||
|
while (itor.hasNext()) {
|
||||||
|
if (itor.next().delay == 0)
|
||||||
|
itor.remove();
|
||||||
|
}
|
||||||
|
|
||||||
return frames;
|
return frames;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue