/// <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); }
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); }