public void SplitSegmentData_NoSegments() { var data = new byte[] { }; var segments = JpegSegmentUtils.SplitSegmentData(data, JpegSegmentType.App1, "T").ToList(); Assert.AreEqual(0, segments.Count); }
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 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); }