Beispiel #1
0
 /** Reads Netscape extenstion to obtain iteration count */
 protected void readNetscapeExt() {
   do {
     readBlock();
     if (block[0] == 1) {
       // loop count sub-block
       final int b1 = (block[1]) & 0xff;
       final int b2 = (block[2]) & 0xff;
       loopCount = (b2 << 8) | b1;
     }
   } while ((blockSize > 0) && !err());
 }
Beispiel #2
0
 /** Main file parser. Reads GIF content blocks. */
 protected void readContents() {
   // read GIF file content blocks
   boolean done = false;
   while (!(done || err())) {
     int code = read();
     switch (code) {
       case 0x2C: // image separator
         readBitmap();
         break;
       case 0x21: // extension
         code = read();
         switch (code) {
           case 0xf9: // graphics control extension
             // Start a new frame
             currentFrame = new GifFrame();
             readGraphicControlExt();
             break;
           case 0xff: // application extension
             readBlock();
             String app = "";
             for (int i = 0; i < 11; i++) {
               app += (char) block[i];
             }
             if (app.equals("NETSCAPE2.0")) {
               readNetscapeExt();
             } else {
               skip(); // don't care
             }
             break;
           case 0xfe: // comment extension
             skip();
             break;
           case 0x01: // plain text extension
             skip();
             break;
           default: // uninteresting extension
             skip();
         }
         break;
       case 0x3b: // terminator
         done = true;
         break;
       case 0x00: // bad byte, but keep going and see what happens break;
       default:
         status = STATUS_FORMAT_ERROR;
     }
   }
 }
Beispiel #3
0
 /** Skips variable length blocks up to and including next zero length block. */
 protected void skip() {
   do {
     readBlock();
   } while ((blockSize > 0) && !err());
 }