public FIBLongHandler(byte[] mainStream, int offset) {
    int longCount = LittleEndian.getShort(mainStream, offset);
    offset += LittleEndian.SHORT_SIZE;
    _longs = new int[longCount];

    for (int x = 0; x < longCount; x++) {
      _longs[x] = LittleEndian.getInt(mainStream, offset + (x * LittleEndian.INT_SIZE));
    }
  }
  public Picture(int dataBlockStartOfsset, byte[] _dataStream, boolean fillBytes) {
    this._dataStream = _dataStream;
    this.dataBlockStartOfsset = dataBlockStartOfsset;
    this.dataBlockSize = LittleEndian.getInt(_dataStream, dataBlockStartOfsset);
    this.pictureBytesStartOffset =
        getPictureBytesStartOffset(dataBlockStartOfsset, _dataStream, dataBlockSize);
    this.size = dataBlockSize - (pictureBytesStartOffset - dataBlockStartOfsset);

    if (size < 0) {}

    this.aspectRatioX = extractAspectRatioX(_dataStream, dataBlockStartOfsset);
    this.aspectRatioY = extractAspectRatioY(_dataStream, dataBlockStartOfsset);

    if (fillBytes) {
      fillImageContent();
    }
  }
  /**
   * For an existing set of text properties, build the list of properties coded for in a given run
   * of properties.
   *
   * @return the number of bytes that were used encoding the properties list
   */
  public int buildTextPropList(
      int containsField, TextProp[] potentialProperties, byte[] data, int dataOffset) {
    int bytesPassed = 0;

    // For each possible entry, see if we match the mask
    // If we do, decode that, save it, and shuffle on
    for (int i = 0; i < potentialProperties.length; i++) {
      // Check there's still data left to read

      // Check if this property is found in the mask
      if ((containsField & potentialProperties[i].getMask()) != 0) {
        if (dataOffset + bytesPassed >= data.length) {
          // Out of data, can't be any more properties to go
          // remember the mask and return
          maskSpecial |= potentialProperties[i].getMask();
          return bytesPassed;
        }

        // Bingo, data contains this property
        TextProp prop = (TextProp) potentialProperties[i].clone();
        int val = 0;
        if (prop.getSize() == 2) {
          val = LittleEndian.getShort(data, dataOffset + bytesPassed);
        } else if (prop.getSize() == 4) {
          val = LittleEndian.getInt(data, dataOffset + bytesPassed);
        } else if (prop.getSize() == 0) {
          // remember "special" bits.
          maskSpecial |= potentialProperties[i].getMask();
          continue;
        }
        prop.setValue(val);
        bytesPassed += prop.getSize();
        textPropList.add(prop);
      }
    }

    // Return how many bytes were used
    return bytesPassed;
  }