CSJ2K.j2k.io.BufferedRandomAccessFile.readUnsignedShort C# (CSharp) Method

readUnsignedShort() public abstract method

public abstract readUnsignedShort ( ) : int
return int
        public abstract int readUnsignedShort();

Usage Example

Example #1
0
        /// <summary> This method parses the codestream for SOT, SOP and EPH markers and
        /// removes header header bits signalling SOP and EPH markers if packed
        /// packet headers are used
        /// 
        /// </summary>
        /// <param name="fi">The file to parse the markers from
        /// 
        /// </param>
        /// <exception cref="IOException">If an I/O error ocurred.
        /// 
        /// </exception>
        private void parseAndFind(BufferedRandomAccessFile fi)
        {
            int length, pos, i, t, sop = 0, eph = 0;
            short marker;
            int halfMarker;
            int tileEnd;
            System.Collections.Generic.List<System.Int32> markPos = new List<int>(10);

            // Find position of first SOT marker
            marker = (short) fi.readUnsignedShort(); // read SOC marker
            marker = (short) fi.readUnsignedShort();
            while (marker != CSJ2K.j2k.codestream.Markers.SOT)
            {
                pos = fi.Pos;
                length = fi.readUnsignedShort();

                // If SOP and EPH markers were only used for parsing in this
                // class remove SOP and EPH markers from Scod field
                if (marker == CSJ2K.j2k.codestream.Markers.COD)
                {
                    int scod = fi.readUnsignedByte();
                    if (tempSop)
                        scod &= 0xfd; // Remove bits indicating SOP
                    if (tempEph)
                        scod &= 0xfb; // Remove bits indicating SOP
                    fi.seek(pos + 2);
                    fi.write(scod);
                }

                fi.seek(pos + length);
                marker = (short) fi.readUnsignedShort();
            }
            pos = fi.Pos;
            fi.seek(pos - 2);

            // Find all packet headers, packed data and tile headers
            for (t = 0; t < nt; t++)
            {
                // Read SOT marker
                fi.readUnsignedShort(); // Skip SOT
                pos = fi.Pos;
                markPos.Add((System.Int32) fi.Pos);
                fi.readInt(); // Skip Lsot and Isot
                length = fi.readInt(); // Read Psot
                fi.readUnsignedShort(); // Skip TPsot & TNsot
                tileEnd = pos + length - 2; // Last byte of tile

                // Find position of SOD marker
                marker = (short) fi.readUnsignedShort();
                while (marker != CSJ2K.j2k.codestream.Markers.SOD)
                {
                    pos = fi.Pos;
                    length = fi.readUnsignedShort();

                    // If SOP and EPH markers were only used for parsing in this
                    // class remove SOP and EPH markers from Scod field
                    if (marker == CSJ2K.j2k.codestream.Markers.COD)
                    {
                        int scod = fi.readUnsignedByte();
                        if (tempSop)
                            scod &= 0xfd; // Remove bits indicating SOP
                        if (tempEph)
                            scod &= 0xfb; // Remove bits indicating SOP
                        fi.seek(pos + 2);
                        fi.write(scod);
                    }
                    fi.seek(pos + length);
                    marker = (short) fi.readUnsignedShort();
                }

                // Find all SOP and EPH markers in tile
                sop = 0;
                eph = 0;

                i = fi.Pos;
                while (i < tileEnd)
                {
                    halfMarker = (short) fi.readUnsignedByte();
                    if (halfMarker == (short) 0xff)
                    {
                        marker = (short) ((halfMarker << 8) + fi.readUnsignedByte());
                        i++;
                        if (marker == CSJ2K.j2k.codestream.Markers.SOP)
                        {
                            markPos.Add((System.Int32) fi.Pos);
                            ppt[t]++;
                            sop++;
                            fi.skipBytes(4);
                            i += 4;
                        }

                        if (marker == CSJ2K.j2k.codestream.Markers.EPH)
                        {
                            markPos.Add((System.Int32) fi.Pos);
                            eph++;
                        }
                    }
                    i++;
                }
            }
            markPos.Add((System.Int32) (fi.Pos + 2));
            positions = new System.Int32[markPos.Count];
            markPos.CopyTo(positions);
        }