コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }