SWT Jface Eclipse Java

/*
SWT/JFace in Action
GUI Design with Eclipse 3.0
Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic
ISBN: 1932394273
Publisher: Manning
*/
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.RGB;
public class Ch7_Images {
  public static void main(String[] args) {
    int numRows = 6, numCols = 11, pix = 20;
    PaletteData pd = new PaletteData(new RGB[] { new RGB(0x00, 0x00, 0x00),
        new RGB(0x80, 0x80, 0x80), new RGB(0xFF, 0xFF, 0xFF) });
    ImageData[] flagArray = new ImageData[3];
    for (int frame = 0; frame < flagArray.length; frame++) {
      flagArray[frame] = new ImageData(pix * numCols, pix * numRows, 4,
          pd);
      flagArray[frame].delayTime = 10;
      for (int x = 0; x < pix * numCols; x++) {
        for (int y = 0; y < pix * numRows; y++) {
          int value = (((x / pix) % 3) + (3 - ((y / pix) % 3)) + frame) % 3;
          flagArray[frame].setPixel(x, y, value);
        }
      }
    }
    ImageLoader gifloader = new ImageLoader();
    ByteArrayOutputStream flagByte[] = new ByteArrayOutputStream[3];
    byte[][] gifarray = new byte[3][];
    gifloader.data = flagArray;
    for (int i = 0; i < 3; i++) {
      flagByte[i] = new ByteArrayOutputStream();
      flagArray[0] = flagArray[i];
      gifloader.save(flagByte[i], SWT.IMAGE_GIF);
      gifarray[i] = flagByte[i].toByteArray();
    }
    byte[] gif = new byte[4628];
    System.arraycopy(gifarray[0], 0, gif, 0, 61);
    System.arraycopy(new byte[] { 33, (byte) 255, 11 }, 0, gif, 61, 3);
    System.arraycopy("NETSCAPE2.0".getBytes(), 0, gif, 64, 11);
    System.arraycopy(new byte[] { 3, 1, -24, 3, 0, 33, -7, 4, -24 }, 0,
        gif, 75, 9);
    System.arraycopy(gifarray[0], 65, gif, 84, 1512);
    for (int i = 1; i < 3; i++) {
      System.arraycopy(gifarray[i], 61, gif, 1516 * i + 80, 3);
      gif[1516 * i + 83] = (byte) -24;
      System.arraycopy(gifarray[i], 65, gif, 1516 * i + 84, 1512);
    }
    try {
      DataOutputStream in = new DataOutputStream(
          new BufferedOutputStream(new FileOutputStream(new File(
              "FlagGIF.gif"))));
      in.write(gif, 0, gif.length);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}