internal override IFDHeader ParseBytes(List <byte> bytes, Endianness e, int offset)
        {
            IFDHeader result = new IFDHeader(typeof(CanonMakerNotesTagCode));

            byte[] fieldsNumberBytes = new byte[2];
            fieldsNumberBytes[0] = ByteManager.ChopByteArray(bytes.ToArray(), 0, 1)[0];
            int fieldsNumber = ByteManager.GetShortValue(fieldsNumberBytes);

            int voided = 0;

            byte[][] fieldsBytes = exifProcessor.ExtractTagsBytes(ByteManager.ChopByteArray(bytes.ToArray(), 1, fieldsNumber * 12).ToList(), fieldsNumber).ToArray();

            foreach (byte[] fieldBytes in fieldsBytes)
            {
                byte[] orderedBytes = OrderIFDFieldBytes(fieldBytes);

                IFDField field = exifProcessor.GetIFDField <CanonMakerNotesTagCode>(orderedBytes, e);

                field.Block = IFDHeaderType.MakerNotesHeader;

                field.ValueElementsOffset = ByteManager.GetIntValue(field.FieldValueElements);

                LoadFieldTextValue <CanonMakerNotesTagCode>(ref field, bytes, offset, offset, e, voided);

                result.IFDFields.Add(field);
            }

            return(result);
        }
Esempio n. 2
0
        internal override IFDHeader ParseBytes(List <byte> bytes, Endianness e, int offsetCorrectionIndex)
        {
            IFDHeader result = new IFDHeader(typeof(NikonType3MakerNotesTagCode));

            TiffHeader tiffHeader = exifProcessor.GetTiffHeader(bytes, 10);

            result = exifProcessor.GetIFDHeader <NikonType3MakerNotesTagCode>(IFDHeaderType.MakerNotesHeader, bytes, 10 + 8, 10 + 8, tiffHeader.ByteOrder);
            return(result);
        }
Esempio n. 3
0
        internal IFDHeader GetMakerNoteIFDHeader(IFDField makeField, byte[] makerNotesFieldBytes, Endianness e, ImageFile processingFile)
        {
            IFDHeader result = null;

            MakerInfo makerInfo = MakerInfo.GetMakerInfo(makeField);

            result = makerInfo.GetMakerNotesHeader(makerNotesFieldBytes, e, processingFile);

            return(result);
        }
        override protected internal async Task ProcessTagsAsync()
        {
            await Task.Run(() =>
            {
                ProcessingFile.App1HeaderOffset = exifProcessor.LocateApp1FileMarkIndex(ProcessingFile.FileBytes);

                if (ProcessingFile.App1HeaderOffset < 0)
                {
                    return;
                }

                ProcessingFile.App1 = exifProcessor.ExtractApp1Header(ProcessingFile.FileBytes, ProcessingFile.App1HeaderOffset);

                ProcessingFile.App1.TiffHeader = exifProcessor.GetTiffHeader(ProcessingFile.FileBytes, ProcessingFile.TiffHeaderOffset);

                ProcessingFile.App1.ZerothHeader = exifProcessor.GetIFDHeader <IFDTagCode>(IFDHeaderType.ZerothIFD, ProcessingFile.FileBytes, ProcessingFile.ZerothHeaderOffset, ProcessingFile.TiffHeaderOffset, ProcessingFile.App1.TiffHeader.ByteOrder);

                ProcessingFile.App1.ExifHeader = exifProcessor.GetIFDHeader <IFDTagCode>(IFDHeaderType.ExifIFD, ProcessingFile.FileBytes, ProcessingFile.ExifHeaderOffset, ProcessingFile.TiffHeaderOffset, ProcessingFile.App1.TiffHeader.ByteOrder);

                ProcessingFile.App1.InteropHeader = exifProcessor.GetIFDHeader <IFDTagCode>(IFDHeaderType.InteroperatibilityIFD, ProcessingFile.FileBytes, ProcessingFile.InteropHeaderOffset, ProcessingFile.TiffHeaderOffset, ProcessingFile.App1.TiffHeader.ByteOrder);

                ProcessingFile.App1.FirstHeader = exifProcessor.GetIFDHeader <IFDTagCode>(IFDHeaderType.FirstIFD, ProcessingFile.FileBytes, ProcessingFile.FirstHeaderOffset, ProcessingFile.TiffHeaderOffset, ProcessingFile.App1.TiffHeader.ByteOrder);

                IFDHeader exifHeaderRef = ProcessingFile.App1.ExifHeader;
                IFDField makeField      = exifProcessor.FindField(ProcessingFile.App1.ZerothHeader.IFDFields, (uint)IFDTagCode.Make);
                if (makeField != null)
                {
                    bool processed = exifProcessor.LoadMakerNotesHeader(ref exifHeaderRef, makeField, ProcessingFile.FileBytes, ProcessingFile.App1.TiffHeader.ByteOrder, ProcessingFile);
                    if (processed)
                    {
                        ProcessingFile.App1.ExifHeader.RemoveMarkerNotesIFD();
                    }
                }

                Fields = new List <IFDField>();
                Fields.AddRange(ProcessingFile.App1.ZerothHeader.IFDFields);
                Fields.AddRange(ProcessingFile.App1.ExifHeader.IFDFields);

                if (ProcessingFile.App1.InteropHeader != null)
                {
                    Fields.AddRange(ProcessingFile.App1.InteropHeader.IFDFields);
                }

                if (ProcessingFile.App1.FirstHeader != null)
                {
                    Fields.AddRange(ProcessingFile.App1.FirstHeader.IFDFields);
                }

                if (ProcessingFile.App1.ExifHeader.MakerHeader != null)
                {
                    Fields.AddRange(ProcessingFile.App1.ExifHeader.MakerHeader.IFDFields);
                }
            });
        }
Esempio n. 5
0
        internal override IFDHeader GetMakerNotesHeader(byte[] makerNotesFieldBytes, Endianness e, ImageFile processingFile)
        {
            IFDHeader result = null;

            CanonMakerNotesBytesParser parser = GetMakerNotesBytesParser();

            if (parser != null)
            {
                int offset = 8 + processingFile.TiffHeaderOffset - processingFile.MakerNotesTagOffset;
                result = parser.ParseBytes(makerNotesFieldBytes.ToList(), Endianness.BigEndian, offset);
            }

            return(result);
        }
Esempio n. 6
0
        internal override IFDHeader GetMakerNotesHeader(byte[] makerNotesFieldBytes, Endianness e)
        {
            IFDHeader result = null;

            NikonMakerNotesHeaderFormat format = IdentifyMakerNoteHeaderFormat(makerNotesFieldBytes.ToArray(), e);

            MakerNotesBytesParser parser = GetMakerNotesBytesParser(format);

            if (parser != null)
            {
                result = parser.ParseBytes(makerNotesFieldBytes.ToList(), e);
            }

            return(result);
        }
Esempio n. 7
0
        internal override IFDHeader GetMakerNotesHeader(byte[] makerNotesFieldBytes, Endianness e, ImageFile processingFile)
        {
            IFDHeader result = null;

            NikonMakerNotesHeaderFormat format = IdentifyMakerNoteHeaderFormat(makerNotesFieldBytes.ToArray(), e);

            MakerNotesBytesParser parser = GetMakerNotesBytesParser(format);

            if (parser != null)
            {
                int offsetCorrectionIndex = -processingFile.MakerNotesTagOffset + processingFile.TiffHeaderOffset + 8;
                result = parser.ParseBytes(makerNotesFieldBytes.ToList(), e, offsetCorrectionIndex);
            }

            return(result);
        }
Esempio n. 8
0
        internal bool LoadMakerNotesHeader(ref IFDHeader exifHeaderRef, IFDField makeField, List <byte> fileBytes, Endianness e, ImageFile processingFile)
        {
            if (exifHeaderRef == null)
            {
                return(true);
            }

            IFDField makerNoteField = FindField(exifHeaderRef.IFDFields, (uint)IFDTagCode.MakerNote);

            if (makerNoteField != null)
            {
                byte[] makerNotesBytes = ByteManager.ChopByteArray(fileBytes.ToArray(), processingFile.TiffHeaderOffset + makerNoteField.ValueElementsOffset, makerNoteField.ValueElementsCount);

                exifHeaderRef.MakerHeader = GetMakerNoteIFDHeader(makeField, makerNotesBytes, e, processingFile);
            }
            return(exifHeaderRef.MakerHeader != null && exifHeaderRef.MakerHeader.IFDFields != null);
        }
Esempio n. 9
0
        internal IFDHeader GetIFDHeader <T>(IFDHeaderType blockType, List <byte> fileBytes, int blockDataOffset, int tiffHeaderOffset, Endianness e)
        {
            if ((blockType == IFDHeaderType.InteroperatibilityIFD || blockType == IFDHeaderType.FirstIFD) &&
                blockDataOffset == tiffHeaderOffset)
            {
                return(null);
            }

            int lastBlockByteFileOffset = 0;

            IFDHeader result = new IFDHeader(typeof(T));

            byte[] fieldsCountBytes       = ByteManager.ChopByteArray(fileBytes.ToArray(), blockDataOffset, 2);
            byte[] sortedFieldsCountBytes = SortBytes(e, fieldsCountBytes);
            result.FieldsCount = ByteManager.GetIntValue(sortedFieldsCountBytes);

            result.IFDFields = GetIFDFields <T>(blockType, fileBytes, blockDataOffset, (int)result.FieldsCount, tiffHeaderOffset, e, out lastBlockByteFileOffset);

            if (blockType == IFDHeaderType.ZerothIFD)
            {
                result.OffsetToNextIFD = lastBlockByteFileOffset - blockDataOffset;
            }
            else if (blockType == IFDHeaderType.ExifIFD)
            {
                var query = from f in result.IFDFields where f.FieldCode == (uint)IFDTagCode.InteropOffset select f;
                if (query != null && query.Count() > 0)
                {
                    IFDField interopField = query.First();
                    result.OffsetToNextIFD = ByteManager.GetIntValue(interopField.FieldValueElements);
                }
            }

            byte[] offsetToNextIFDHeader       = ByteManager.ChopByteArray(fileBytes.ToArray(), blockDataOffset + 2 + result.FieldsCount * 12, 4);
            byte[] sortedOffsetToNextIFDHeader = SortBytes(e, offsetToNextIFDHeader);
            int    offset = ByteManager.GetIntValue(sortedOffsetToNextIFDHeader);

            result.OffsetTo1stIFD = offset;

            return(result);
        }
        internal override IFDHeader ParseBytes(List <byte> bytes, Endianness e, int offsetCorrectionIndex)
        {
            IFDHeader result = new IFDHeader(typeof(NikonType1MakerNotesTagCode));

            byte[] fieldsCountBytes       = ByteManager.ChopByteArray(bytes.ToArray(), 8, 2);
            byte[] sortedFieldsCountBytes = exifProcessor.SortBytes(e, fieldsCountBytes);
            result.FieldsCount = ByteManager.GetIntValue(sortedFieldsCountBytes);

            int voided = 0;

            byte[][] fieldsBytes = exifProcessor.ExtractTagsBytes(ByteManager.ChopByteArray(bytes.ToArray(), 8 + 2, result.FieldsCount * 12).ToList(), result.FieldsCount).ToArray();

            foreach (byte[] fieldBytes in fieldsBytes)
            {
                IFDField field = exifProcessor.GetIFDField <NikonType1MakerNotesTagCode>(fieldBytes, e);
                field.Block = IFDHeaderType.MakerNotesHeader;
                exifProcessor.LoadFieldTextValue <NikonType1MakerNotesTagCode>(ref field, bytes, offsetCorrectionIndex, 0, e, voided);
                result.IFDFields.Add(field);
            }

            return(result);
        }