Пример #1
0
        public void SplitSegmentData_NoSegments()
        {
            var data     = new byte[] { };
            var segments = JpegSegmentUtils.SplitSegmentData(data, JpegSegmentType.App1, "T").ToList();

            Assert.AreEqual(0, segments.Count);
        }
Пример #2
0
        public void MatchSegment_ValidHeaderAndType()
        {
            var segment = new JpegSegment(JpegSegmentType.App1, new byte[]
            {
                (byte)'T', (byte)'e', (byte)'s', (byte)'t', 0x00, 0x12, 0x34
            }, 0);

            Assert.IsTrue(JpegSegmentUtils.MatchSegment(segment, JpegSegmentType.App1, "Test\0"));
        }
Пример #3
0
        public void JoinSegmentData_NoSegments()
        {
            var segments = new List <JpegSegment>
            {
                new JpegSegment(JpegSegmentType.App0, new byte[0], 0),
                new JpegSegment(JpegSegmentType.App1, new byte[] { 0x12, 0x34 }, 0),
            };
            var data = JpegSegmentUtils.JoinSegmentData(segments, JpegSegmentType.App1, "Test\0");

            Assert.AreEqual(0, data.Length);
        }
Пример #4
0
        public void SplitSegmentData_OneSegment()
        {
            var data     = new byte[] { 0x12, 0x34 };
            var segments = JpegSegmentUtils.SplitSegmentData(data, JpegSegmentType.App1, "T", 5).ToList();

            Assert.AreEqual(1, segments.Count);

            Assert.AreEqual(JpegSegmentType.App1, segments[0].Type);
            CollectionAssert.AreEqual(new byte[]
            {
                (byte)'T', 0x12, 0x34
            }, segments[0].Bytes);
        }
Пример #5
0
        public void JoinSegmentData_OneSegment()
        {
            var segments = new List <JpegSegment>
            {
                new JpegSegment(JpegSegmentType.App0, new byte[0], 0),
                new JpegSegment(JpegSegmentType.App1, new byte[]
                {
                    (byte)'T', (byte)'e', (byte)'s', (byte)'t', 0x00, 0x12, 0x34
                }, 0),
                new JpegSegment(JpegSegmentType.App1, new byte[] { 0x12, 0x34 }, 0),
            };
            var data = JpegSegmentUtils.JoinSegmentData(segments, JpegSegmentType.App1, "Test\0");

            CollectionAssert.AreEqual(new byte[] { 0x12, 0x34 }, data);
        }
Пример #6
0
        public void Store(IEntity entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            string tmpFileName;

            using (var segmentReader = _segmentReaderFactory.CreateFromPath(entity.Path))
                using (var segmentWriter = _segmentWriterFactory.CreateFromPath(entity.Path, out tmpFileName))
                {
                    // copy all but attribute segments
                    for (;;)
                    {
                        var segment = segmentReader.ReadSegment();
                        if (segment == null)
                        {
                            break;
                        }

                        if (IsAttributeSegment(segment) ||
                            segment.Type == JpegSegmentType.Sos)
                        {
                            continue;
                        }

                        segmentWriter.WriteSegment(segment);
                    }

                    // serialize attributes to JpegSegments
                    var serialized = Serialize(entity);
                    var segments   = JpegSegmentUtils.SplitSegmentData(serialized, JpegSegmentType.App1,
                                                                       AttributeReader.JpegSegmentHeader);

                    // write attribute segments
                    foreach (var segment in segments)
                    {
                        segmentWriter.WriteSegment(segment);
                    }

                    // write SOS segment and image data (including the EOI segment at the end)
                    segmentWriter.Finish(segmentReader.BaseStream);
                }

            // replace the original file with the modified file
            _fileSystem.ReplaceFile(tmpFileName, entity.Path, null);
        }
Пример #7
0
        public void SplitSegmentData_MultipleSegmentsWithTheActialMaximalSegmentSize()
        {
            var data = new byte[0xFFFF - 1];

            data[data.Length - 1] = 0xFF;
            data[data.Length - 2] = 0xEE;

            var segments = JpegSegmentUtils.SplitSegmentData(data, JpegSegmentType.App1, "T").ToList();

            Assert.AreEqual(2, segments.Count);
            Assert.AreEqual(0xFFFF - 2, segments[0].Bytes.Length);
            Assert.AreEqual(3, segments[1].Bytes.Length);
            Assert.AreEqual((byte)'T', segments[1].Bytes[0]);
            Assert.AreEqual(0xEE, segments[1].Bytes[1]);
            Assert.AreEqual(0xFF, segments[1].Bytes[2]);
        }
Пример #8
0
        public void SplitSegmentData_MultipleSegments()
        {
            var data     = new byte[] { 0x12, 0x34, 0x56, 0x78, 0x9A };
            var segments = JpegSegmentUtils.SplitSegmentData(data, JpegSegmentType.App1, "T", 5).ToList();

            Assert.AreEqual(2, segments.Count);

            Assert.AreEqual(JpegSegmentType.App1, segments[0].Type);
            CollectionAssert.AreEqual(new byte[]
            {
                (byte)'T', 0x12, 0x34, 0x56, 0x78
            }, segments[0].Bytes);

            Assert.AreEqual(JpegSegmentType.App1, segments[1].Type);
            CollectionAssert.AreEqual(new byte[]
            {
                (byte)'T', 0x9A
            }, segments[1].Bytes);
        }
Пример #9
0
        private static bool IsAttributeSegment(JpegSegment segment)
        {
            const string header = AttributeReader.JpegSegmentHeader;

            return(JpegSegmentUtils.MatchSegment(segment, JpegSegmentType.App1, header));
        }
Пример #10
0
        public IAttributeReader CreateFromSegments(FileInfo file, IEnumerable <JpegSegment> segments)
        {
            var data = JpegSegmentUtils.JoinSegmentData(segments, JpegSegmentType.App1, AttributeReader.JpegSegmentHeader);

            return(new AttributeReader(new BinaryReader(new MemoryStream(data))));
        }
Пример #11
0
        public void MatchSegment_ShortHeader()
        {
            var segment = new JpegSegment(JpegSegmentType.App1, new byte[0], 0);

            Assert.IsFalse(JpegSegmentUtils.MatchSegment(segment, JpegSegmentType.App1, "Test\0"));
        }
Пример #12
0
        public void MatchSegment_InvalidType()
        {
            var segment = new JpegSegment(JpegSegmentType.App0, new byte[0], 0);

            Assert.IsFalse(JpegSegmentUtils.MatchSegment(segment, JpegSegmentType.App1, "Test\0"));
        }