public CompressionLookupRecord(java.nio.ByteBuffer buffer, int compressionLookupSubsectionLocation, RPFColorMap[] colormaps // TODO update LUT with the color mapped values to gain performance ) { this.tableID = NITFSUtil.getUShort(buffer); this.numOfRecords = (int)NITFSUtil.getUInt(buffer); this.numOfValuesPerRecord = NITFSUtil.getUShort(buffer); this.valueBitLength = NITFSUtil.getUShort(buffer); this.tableLocation = (int)(NITFSUtil.getUInt(buffer) + compressionLookupSubsectionLocation); int saveOffset = buffer.position(); this.bytesPerRecord = (short)(this.numOfValuesPerRecord * this.valueBitLength / 8L); this.lut = new byte[this.numOfRecords * this.bytesPerRecord]; buffer.position(this.tableLocation); buffer.get(this.lut, 0, this.numOfRecords * this.bytesPerRecord); buffer.position(saveOffset); }
private int parseSegment(NITFSSegmentType segType, int nextSegmentOffset) { int headerLengthSize = segType.getHeaderLengthSize(); int dataLengthSize = segType.getDataLengthSize(); int numOfSegments = Integer.parseInt(NITFSUtil.getString(this.buffer, 3)); for (int i = 0; i < numOfSegments; i++) { int segHeaderLength = Integer.parseInt(NITFSUtil.getString(this.buffer, headerLengthSize)); int seqDataLength = Integer.parseInt(NITFSUtil.getString(this.buffer, dataLengthSize)); int saveOffset = this.buffer.position(); // pass buffer to NITFSSegment to parse their headers' contents NITFSSegment segment; switch (segType) { case IMAGE_SEGMENT: segment = new NITFSImageSegment(this.buffer, nextSegmentOffset, segHeaderLength, nextSegmentOffset + segHeaderLength, seqDataLength); break; case SYMBOL_SEGMENT: segment = new NITFSSymbolSegment(this.buffer, nextSegmentOffset, segHeaderLength, nextSegmentOffset + segHeaderLength, seqDataLength); break; case LABEL_SEGMENT: segment = new NITFSLabelSegment(this.buffer, nextSegmentOffset, segHeaderLength, nextSegmentOffset + segHeaderLength, seqDataLength); break; case TEXT_SEGMENT: segment = new NITFSTextSegment(this.buffer, nextSegmentOffset, segHeaderLength, nextSegmentOffset + segHeaderLength, seqDataLength); break; case DATA_EXTENSION_SEGMENT: segment = new NITFSDataExtensionSegment(this.buffer, nextSegmentOffset, segHeaderLength, nextSegmentOffset + segHeaderLength, seqDataLength); break; case RESERVED_EXTENSION_SEGMENT: segment = new NITFSReservedExtensionSegment(this.buffer, nextSegmentOffset, segHeaderLength, nextSegmentOffset + segHeaderLength, seqDataLength); break; case USER_DEFINED_HEADER_SEGMENT: segment = new RPFUserDefinedHeaderSegment(this.buffer); break; case EXTENDED_HEADER_SEGMENT: // // throw exception - wrong parser for EXTENDED_HEADER_SEGMENT segment = new NITFSExtendedHeaderSegment(this.buffer, nextSegmentOffset, segHeaderLength, nextSegmentOffset + segHeaderLength, seqDataLength); break; default: throw new NITFSRuntimeException("NITFSReader.UnknownOrUnsupportedSegment", segType.ToString()); } this.segments.add(segment); nextSegmentOffset += segHeaderLength + seqDataLength; buffer.position(saveOffset); // restore offset } return(nextSegmentOffset); }