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);
        }
Ejemplo n.º 2
0
        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);
        }