internal int LoadFieldTextValue <T>(ref IFDField field, List <byte> fileBytes, int fieldDataOffset, int tiffHeaderOffset, Endianness e, int lastBlockByteFileOffset) { int result = lastBlockByteFileOffset; byte[] valueBytes; TagElementTypeMappingDictionary typeDictionary = TagElementTypeMappingDictionaryFactory.GetMappingDictionary(typeof(T)); if (field.IsOffset) { long fixedOffset = 0; if (field.Block == IFDHeaderType.ExifIFD) { fixedOffset = tiffHeaderOffset + (long)field.ValueElementsOffset; } else { fixedOffset = fieldDataOffset + (long)field.ValueElementsOffset - 8; } valueBytes = ByteManager.ChopByteArray(fileBytes.ToArray(), fixedOffset, (int)field.ValueElementsCount * typeDictionary[field.ValueElementType].BytesLength); if (lastBlockByteFileOffset < fieldDataOffset + (long)field.ValueElementsOffset - 8 + (int)field.ValueElementsCount * typeDictionary[field.ValueElementType].BytesLength) { result = fieldDataOffset + field.ValueElementsOffset - 8 + field.ValueElementsCount * typeDictionary[field.ValueElementType].BytesLength; } } else { valueBytes = field.FieldValueElements; } TagCodeEnumDictionary enumsDictiornary = FieldCodeEnumDictionaryFactory.GetFieldCodeEnumDictionary <T>(); Type enumType = null; if (enumsDictiornary.ContainsKey(field.FieldCode)) { enumType = enumsDictiornary[field.FieldCode]; } field.Text = GetIFDTextValue <T>(enumType, field.ValueElementType, valueBytes); return(result); }
internal static TagCodeEnumDictionary GetFieldCodeEnumDictionary <T>() { TagCodeEnumDictionary result = null; switch (typeof(T).ToString()) { case "BAFactory.Fx.FileTags.Exif.IFD.IFDTagCode": result = new IFDTagCodeEnumDictionary(); break; case "BAFactory.Fx.FileTags.Exif.MakerNotes.Nikon.NikonType1MakerNotesTagCode": result = new NikonType3MakerNotesTagCodeEnumDictionary(); break; case "BAFactory.Fx.FileTags.Exif.MakerNotes.Nikon.NikonType3MakerNotesTagCode": result = new NikonType3MakerNotesTagCodeEnumDictionary(); break; case "BAFactory.Fx.FileTags.Exif.MakerNotes.Canon.CanonMakerNotesTagCode": result = new CanonMakerNotesTagCodeEnumDictionary(); break; } return(result); }