Пример #1
0
 /**
  * @param FileHandler $fh
  */
 public function decode($fh)
 {
     $fh->seekForward(1);
     // skip block label.
     $this->blockLength = $fh->readByteUint();
     // 12
     $this->textGridLeftPosition = $fh->readUint16();
     $this->textGridTopPosition = $fh->readUint16();
     $this->textGridWidth = $fh->readUint16();
     $this->textGridHeight = $fh->readUint16();
     $this->characterCellWidth = $fh->readByteUint();
     $this->characterCellHeight = $fh->readByteUint();
     $this->textFGColorIndex = $fh->readByteUint();
     $this->textBGColorIndex = $fh->readByteUint();
     $this->readDataSubBlocks($fh);
     // Spool past the \x00 terminator byte. There *should* only be one.
     while ($fh->peekByte() == "") {
         $fh->seekForward(1);
     }
 }
 /**
  * @param FileHandler $fh
  */
 public function readDataSubBlocks($fh)
 {
     $this->dataSubBlocks = "";
     while (!$fh->compareByte("")) {
         $subBlockLength = $fh->readByteUint();
         if ($subBlockLength == 0) {
             return;
         }
         $this->dataSubBlocks .= chr($subBlockLength) . $fh->readData($subBlockLength);
     }
 }
 /**
  * @param FileHandler $fh
  */
 public function decode($fh)
 {
     $fh->seekForward(1);
     // skip block label.
     $this->blockLength = $fh->readByteUint();
     // 4
     $packedFields = $fh->readByteUint();
     $this->reserved = ($packedFields & 0x70) >> 5;
     $this->disposalMethod = ($packedFields & 0x1c) >> 2;
     $this->userInputFlag = ($packedFields & 0x2) > 0;
     $this->transparentColorFlag = ($packedFields & 0x1) > 0;
     $this->delayTime = $fh->readUint16();
     $this->transparentColorIndex = $fh->readByteUint();
     // Spool past the \x00 terminator byte. There *should* only be one.
     while ($fh->compareByte("")) {
         $fh->readByte();
     }
     // The GCE will always be followed by the Image Descriptor.
     $this->imageDescriptor = new ImageDescriptor($fh);
     $this->imageDescriptor->parentGCE = $this;
 }
Пример #4
0
 /**
  * @param FileHandler $fh
  */
 public function decode($fh)
 {
     $fh->seekForward(1);
     // skip block label.
     $this->blockLength = $fh->readByteUint();
     // 11
     $this->applicationIdentifier = $fh->readData(8);
     $this->applicationAuthenticationCode = $fh->readData(3);
     $this->readDataSubBlocks($fh);
     while ($fh->peekByte() == "") {
         $fh->seekForward(1);
     }
 }
 /**
  * @param FileHandler $fh
  *
  * @throws Exception
  */
 public function decode($fh)
 {
     if ($fh->getRemainingBytes() < 7) {
         throw new Exception("Insufficient data. Need 7 bytes, got " . $fh->getRemainingBytes());
     }
     $this->screenWidth = $fh->readUint16();
     $this->screenHeight = $fh->readUint16();
     $packedFields = ord($fh->readByte());
     $this->colorTableFlag = ($packedFields & 0x80) > 0;
     $this->colorResolution = ($packedFields & 0x70) >> 4;
     $this->sortFlag = ($packedFields & 0x8) > 0;
     // For just 8 possible values, the lookup table is faster.
     // the commented lines below is the pedantic way of doing it.
     // $v = ($packedFields & 0x07);
     // $this->colorTableSize = pow(2, $v + 1);
     $this->colorTableSize = $this->ctSizeListRev[$packedFields & 0x7];
     $this->bgColorIndex = $fh->readByteUint();
     $v = $fh->readByteUint();
     $this->pixelAspectRatio = $v > 0 ? ($v + 15) / 64 : 0;
     if ($this->colorTableFlag && $this->colorTableSize > 0) {
         $this->colorTable = $fh->readData($this->colorTableSize * 3);
     }
 }