public void SplitSegmentData_NoSegments() { var data = new byte[] { }; var segments = JpegSegmentUtils.SplitSegmentData(data, JpegSegmentType.App1, "T").ToList(); Assert.AreEqual(0, segments.Count); }
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")); }
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); }
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); }
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); }
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); }
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]); }
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); }
private static bool IsAttributeSegment(JpegSegment segment) { const string header = AttributeReader.JpegSegmentHeader; return(JpegSegmentUtils.MatchSegment(segment, JpegSegmentType.App1, header)); }
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)))); }
public void MatchSegment_ShortHeader() { var segment = new JpegSegment(JpegSegmentType.App1, new byte[0], 0); Assert.IsFalse(JpegSegmentUtils.MatchSegment(segment, JpegSegmentType.App1, "Test\0")); }
public void MatchSegment_InvalidType() { var segment = new JpegSegment(JpegSegmentType.App0, new byte[0], 0); Assert.IsFalse(JpegSegmentUtils.MatchSegment(segment, JpegSegmentType.App1, "Test\0")); }