home *** CD-ROM | disk | FTP | other *** search
- import java.io.PrintStream;
-
- public class GIFImage implements Animation {
- int Width;
- int Height;
- boolean interlace = false;
- boolean looping = true;
- GIFGraphics[] graphics = new GIFGraphics[500];
- int frameCount;
- LZWCompressor compressor;
- private int fps = 10;
-
- GIFImage(int var1, int var2) {
- this.Width = var1;
- this.Height = var2;
- this.frameCount = 0;
- }
-
- public void setFPS(int var1) {
- this.fps = var1;
- }
-
- public int getFPS() {
- return this.fps;
- }
-
- public int addImage(GIFGraphics var1) {
- this.graphics[this.frameCount] = var1;
- return this.frameCount++;
- }
-
- public void serializeTo(PrintStream var1) {
- this.encodeGIF(var1, 0, 0, 8);
- }
-
- void encodeGIF(PrintStream var1, int var2, int var3, int var4) {
- int var5;
- if (var4 <= 1) {
- var5 = 2;
- } else {
- var5 = var4;
- }
-
- this.serializeHeader(var1, var3);
- this.serializeLogicalScreen(var1, var2, var4, var5);
- this.serializeData(var1, var3, var5);
- this.serializeTrailer(var1);
- }
-
- private void serializeHeader(PrintStream var1, int var2) {
- var1.print((var2 < 0 ? "GIF87a" : "GIF89a").substring(0, 6));
- }
-
- private void serializeLogicalScreen(PrintStream var1, int var2, int var3, int var4) {
- int var7 = 1 << var3;
- this.putWord(var1, this.Width);
- this.putWord(var1, this.Height);
- int var5 = 128;
- var5 |= var3 - 1 << 5;
- var5 |= var3 - 1;
- var1.write(var5);
- var1.write(var2);
- var1.write(0);
- this.serializeGlobalColourTable(var1, var7);
- }
-
- private void serializeGlobalColourTable(PrintStream var1, int var2) {
- for(int var3 = 0; var3 < var2; ++var3) {
- var1.write((byte)GIFGraphics.Red[var3]);
- var1.write((byte)GIFGraphics.Green[var3]);
- var1.write((byte)GIFGraphics.Blue[var3]);
- }
-
- }
-
- private void serializeData(PrintStream var1, int var2, int var3) {
- LZWCompressor var4 = new LZWCompressor(var1, this.interlace);
- if (this.looping) {
- var1.write(33);
- var1.write(255);
- var1.write(11);
- var1.print("NETSCAPE2.0");
- var1.write(3);
- var1.write(1);
- this.putWord(var1, 0);
- var1.write(0);
- }
-
- for(int var5 = 0; var5 < this.frameCount; ++var5) {
- this.serializeFrame(var1, var4, false, 100 / this.getFPS(), var2, var3, var5);
- }
-
- }
-
- private void serializeFrame(PrintStream var1, LZWCompressor var2, boolean var3, int var4, int var5, int var6, int var7) {
- if (var5 >= 0) {
- var1.write(33);
- var1.write(249);
- var1.write(4);
- if (var3) {
- var1.write(9);
- } else {
- var1.write(1);
- }
-
- this.putWord(var1, var4);
- var1.write(var5);
- var1.write(0);
- }
-
- var1.write(44);
- this.putWord(var1, this.graphics[var7].left);
- this.putWord(var1, this.graphics[var7].top);
- this.putWord(var1, this.graphics[var7].width);
- this.putWord(var1, this.graphics[var7].height);
- if (this.interlace) {
- var1.write(64);
- } else {
- var1.write(0);
- }
-
- var2.compress(var6 + 1, this.graphics[var7].width, this.graphics[var7].height, this.graphics[var7].getPixels());
- var1.write(0);
- }
-
- private void serializeTrailer(PrintStream var1) {
- var1.write(59);
- var1.flush();
- }
-
- void putWord(PrintStream var1, int var2) {
- var1.write((byte)(var2 & 255));
- var1.write((byte)(var2 >> 8 & 255));
- }
- }
-