protected void readImage() {
	    ix = readShort(); // (sub)image position & size
	    iy = readShort();
	    iw = readShort();
	    ih = readShort();


	    int packed = read();
	    lctFlag = (packed & 0x80) != 0; // 1 - local color table flag
	    interlace = (packed & 0x40) != 0; // 2 - interlace flag
	    // 3 - sort flag
	    // 4-5 - reserved
	    lctSize = 2 << (packed & 7); // 6-8 - local color table size


	    if (lctFlag) {
	      lct = readColorTable(lctSize); // read table
	      act = lct; // make local table active
	    } else {
	      act = gct; // make global table active
	      if (bgIndex == transIndex)
	        bgColor = 0;
	    }
	    int save = 0;
	    if (transparency) {
	      save = act[transIndex];
	      act[transIndex] = 0; // set transparent color if specified
	    }


	    if (act == null) {
	      status = STATUS_FORMAT_ERROR; // no color table defined
	    }


	    if (err())
	      return;


	    decodeImageData(); // decode pixel data
	    skip();


	    if (err())
	      return;


	    frameCount++;


	    // create new image to receive frame data
	    image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);


	    setPixels(); // transfer pixel data to image


	    frames.add(new GifFrame(image, delay)); // add image to frame list


	    if (transparency) {
	      act[transIndex] = save;
	    }
	    resetFrame();


	  }