/**
   * Primary constructor for <code>ImageObject</code>. Will store the buffer reference and calculate
   * the segment offsets and lengths for use in retrieving data for this object. It also stores all
   * image segments so it can recreate original buffer.
   *
   * @param buffer The byte array containing the ImageObject values.
   */
  public ImageObject(ByteArray buffer) {
    byte[] cimsObjectHeaderArray = buffer.read(0, CimsObjectHeader.RECORD_LENGTH);
    cimsObjectHeader = new CimsObjectHeader(cimsObjectHeaderArray);

    // initialize coded data header from input buffer
    int offset0 = cimsObjectHeader.getSegmentOffset(0);
    int length0 = cimsObjectHeader.getSegmentLength(0);
    byte[] cimsCodedDataHeaderArray = new byte[CimsCodedDataHeader.RECORD_LENGTH];
    buffer.read(offset0, cimsObjectHeaderArray, 0, length0);
    cimsCodedDataHeader = new CimsCodedDataHeader(cimsCodedDataHeaderArray);

    // initialize segment array, i.e. load all images
    for (int i = 0; i < segmentArray.length; i++) {
      int segmentOffset = cimsObjectHeader.getSegmentOffset(i + 1);
      int segmentLength = cimsObjectHeader.getSegmentLength(i + 1);
      if (segmentLength > 0) {
        segmentArray[i] = buffer.read(segmentOffset, segmentLength);
      }
    }
  }