예제 #1
0
 public void Position_EqualsTheStreamPosition(byte[] data, long expectedResult)
 {
     using var stream = new MemoryStream();
     using var writer = new TiffStreamWriter(stream);
     writer.Write(data);
     Assert.Equal(writer.Position, expectedResult);
 }
예제 #2
0
        public void WriteMarker_WritesToPlacedPosition()
        {
            using var stream = new MemoryStream();

            using (var writer = new TiffStreamWriter(stream))
            {
                writer.Write(0x11111111);
                long marker = writer.PlaceMarker();
                writer.Write(0x33333333);

                writer.WriteMarker(marker, 0x12345678);

                writer.Write(0x44444444);
            }

            Assert.Equal(
                new byte[]
            {
                0x11, 0x11, 0x11, 0x11,
                0x78, 0x56, 0x34, 0x12,
                0x33, 0x33, 0x33, 0x33,
                0x44, 0x44, 0x44, 0x44
            },
                stream.ToArray());
        }
예제 #3
0
        public void CanFinalizeShortTag()
        {
            var artist = "Bob";
            var tag    = new Tag <char>
            {
                DataType = TagDataType.ASCII,
                ID       = (ushort)BaselineTags.Artist,
                Length   = (uint)artist.Length + 1,
                Values   = artist.ToASCIIArray()
            };

            using (var stream = new TiffStreamWriter())
            {
                stream.WriteDWord(1);
                stream.WriteTagPlaceholder(tag);
                stream.FinalizeTag(tag);

                var data = stream.ToArray();

                Assert.Equal(4u, tag.Offset);
                Assert.Equal(4u, tag.Length);
                Assert.Equal(16, data.Length);
                Assert.Equal(artist, Encoding.ASCII.GetString(tag.RawValue).Trim('\0'));
            }
        }
예제 #4
0
        public void CanWriteTagPlaceholder()
        {
            var tag = new Tag
            {
                DataType = TagDataType.Short,
                ID       = (ushort)BaselineTags.BitsPerSample,
                Length   = 1
            };

            using (var stream = new TiffStreamWriter())
            {
                stream.WriteTagPlaceholder(tag);

                var data = stream.ToArray();
                Assert.True(data.SequenceEqual(new byte[] { 0x02, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }));
            }

            using (var stream = new TiffStreamWriter(forceBigEndian: true))
            {
                stream.WriteTagPlaceholder(tag);

                var data = stream.ToArray();
                Assert.True(data.SequenceEqual(new byte[] { 0x01, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 }));
            }
        }
예제 #5
0
        public void CanFinalizeLongTag()
        {
            var artist = "Ansel Adams";
            var tag    = new Tag <char>
            {
                DataType = TagDataType.ASCII,
                ID       = (ushort)BaselineTags.Artist,
                Length   = (uint)artist.Length + 1,
                Values   = artist.ToASCIIArray()
            };

            using (var stream = new TiffStreamWriter())
            {
                stream.WriteDWord(1);
                stream.WriteTagPlaceholder(tag);
                stream.FinalizeTag(tag);

                var data = stream.ToArray();

                Assert.Equal(4u, tag.Offset);
                Assert.Equal(12u, tag.Length);
                Assert.Equal(28, data.Length);
                Assert.True(tag.RawValue.SequenceEqual(BitConverter.GetBytes(16u)));
            }
        }
예제 #6
0
        public void WritePadded_WritesByteArray(byte[] bytes, byte[] expectedResult)
        {
            using var stream = new MemoryStream();
            using var writer = new TiffStreamWriter(stream);
            writer.WritePadded(bytes);

            Assert.Equal(expectedResult, stream.ToArray());
        }
예제 #7
0
        public void Write_WritesUInt32()
        {
            using var stream = new MemoryStream();
            using var writer = new TiffStreamWriter(stream);
            writer.Write(12345678U);

            Assert.Equal(new byte[] { 0x4E, 0x61, 0xBC, 0x00 }, stream.ToArray());
        }
예제 #8
0
        public void Write_WritesUInt16()
        {
            using var stream = new MemoryStream();
            using var writer = new TiffStreamWriter(stream);
            writer.Write(1234);

            Assert.Equal(new byte[] { 0xD2, 0x04 }, stream.ToArray());
        }
예제 #9
0
        public void Write_WritesByteArray()
        {
            using var stream = new MemoryStream();
            using var writer = new TiffStreamWriter(stream);
            writer.Write(new byte[] { 2, 4, 6, 8 });

            Assert.Equal(new byte[] { 2, 4, 6, 8 }, stream.ToArray());
        }
예제 #10
0
        public void WriteHeader_ReturnsFirstIfdMarker()
        {
            using var stream = new MemoryStream();
            var encoder = new TiffEncoderCore(Options, MemoryAllocator);

            using (var writer = new TiffStreamWriter(stream))
            {
                long firstIfdMarker = encoder.WriteHeader(writer);
                Assert.Equal(4, firstIfdMarker);
            }
        }
예제 #11
0
        public void WriteHeader_WritesValidHeader()
        {
            using var stream = new MemoryStream();
            var encoder = new TiffEncoderCore(Options, MemoryAllocator);

            using (var writer = new TiffStreamWriter(stream))
            {
                long firstIfdMarker = encoder.WriteHeader(writer);
            }

            Assert.Equal(new byte[] { 0x49, 0x49, 42, 0, 0x00, 0x00, 0x00, 0x00 }, stream.ToArray());
        }
예제 #12
0
        public void WriteTagPlaceholderUpdatesOffset()
        {
            var tag = new Tag
            {
                DataType = TagDataType.ASCII,
                ID       = (ushort)BaselineTags.Artist,
                Length   = 1
            };

            using (var stream = new TiffStreamWriter())
            {
                stream.WriteTagPlaceholder(tag);
                stream.WriteTagPlaceholder(tag);

                Assert.Equal(24, stream.Length);
                Assert.Equal(12u, tag.Offset);
            }
        }
예제 #13
0
        public void CanWriteHeader()
        {
            using (var stream = new TiffStreamWriter())
            {
                stream.WriteHeader();

                var header = stream.ToArray();
                Assert.True(header.SequenceEqual(new byte[] { 0x49, 0x49, 0x2a, 0x00 }));
            }

            using (var stream = new TiffStreamWriter(forceBigEndian: true))
            {
                stream.WriteHeader();

                var header = stream.ToArray();
                Assert.True(header.SequenceEqual(new byte[] { 0x4d, 0x4d, 0x00, 0x2a }));
            }
        }
예제 #14
0
        public void CanWriteDWord()
        {
            using (var stream = new TiffStreamWriter())
            {
                stream.WriteDWord(42);

                var data = stream.ToArray();
                Assert.True(data.SequenceEqual(new byte[] { 0x2a, 0x00, 0x00, 0x00 }));
            }

            using (var stream = new TiffStreamWriter(forceBigEndian: true))
            {
                stream.WriteDWord(42);

                var data = stream.ToArray();
                Assert.True(data.SequenceEqual(new byte[] { 0x00, 0x00, 0x00, 0x2a }));
            }
        }
예제 #15
0
 public void IsLittleEndian_IsTrueOnWindows()
 {
     using var stream = new MemoryStream();
     using var writer = new TiffStreamWriter(stream);
     Assert.True(writer.IsLittleEndian);
 }