Ejemplo n.º 1
0
        /// <summary>
        /// Parses the bytes specified as an InteroperabilityField.
        /// </summary>
        /// <param name="buffer">The buffer containing the data.</param>
        /// <param name="offset">The offset into the buffer to begin parsing.</param>
        /// <param name="little_endian">When true, integers are in little endian format, when false integers are in big endian format.</param>
        /// <returns>An InteroperabilityField object.</returns>
        public static InteroperabilityField FromBytes(byte[] buffer, int offset, bool little_endian)
        {
            var return_value = new InteroperabilityField();

            return_value.IsLittleEndian = little_endian;
            return_value.Tag            = TIFFHeader.ToUInt16(buffer, offset, little_endian);
            return_value.Type           = TIFFHeader.ToUInt16(buffer, offset + 2, little_endian);
            return_value.Count          = TIFFHeader.ToInt32(buffer, offset + 4, little_endian);
            return_value.OffsetToValue  = TIFFHeader.ToInt32(buffer, offset + 8, little_endian);

            return_value.Byte0 = buffer[offset + 8];
            return_value.Byte1 = buffer[offset + 9];
            return_value.Byte2 = buffer[offset + 10];
            return_value.Byte3 = buffer[offset + 11];

            return_value.Buffer = buffer;

            return(return_value);
        }
Ejemplo n.º 2
0
        public bool FromBytes(byte[] buffer, int offset, bool little_endian)
        {
            Empty();

            if (buffer == null || offset < 0 || buffer.Length < 6)
            {
                return(false);
            }

            int number_of_entries = TIFFHeader.ToUInt16(buffer, offset, little_endian);

            if (number_of_entries > 5460) // 5461 entries in 64KB buffer
            {
                return(false);
            }

            Fields = new InteroperabilityField[number_of_entries];

            string tag_name = string.Empty;

            int entry_index = 0;

            while (entry_index < number_of_entries)
            {
                Fields[entry_index] = InteroperabilityField.FromBytes(buffer, offset + 2 + (entry_index * 12), little_endian);

                if (TagNames != null && TagNames.TryGetValue(Fields[entry_index].Tag, out tag_name) == true)
                {
                    Fields[entry_index].TagName = tag_name;
                }

                entry_index++;
            }

            NextOffset = TIFFHeader.ToInt32(buffer, offset + 2 + (number_of_entries * 12), little_endian);

            return(true);
        }