Exemplo n.º 1
0
 public static void Equal(TiffIfdEntry expected, TiffIfdEntry actual)
 {
     Assert.Equal(expected.Tag, actual.Tag);
     Assert.Equal(expected.Type, actual.Type);
     Assert.Equal(expected.Count, actual.Count);
     Assert.Equal(expected.Value, actual.Value);
 }
Exemplo n.º 2
0
        public static TiffIfdEntry_Stream_Tuple GenerateTiffIfdEntry(ushort tag, TiffType type, byte[] data, byte paddingByteCount, ByteOrder byteOrder, int count)
        {
            // Create a stream with padding bytes as required

            var streamBuilder = new StreamBuilder(byteOrder);

            byte[] paddingBytes = Enumerable.Repeat((byte)42, paddingByteCount).ToArray();
            streamBuilder.WriteBytes(paddingBytes);

            // If the data is longer than four bytes, then write this to the stream and set the data to the offset

            if (data.Length > 4)
            {
                streamBuilder.WriteBytes(data);
                data = byteOrder == ByteOrder.LittleEndian ? new byte[] { paddingByteCount, 0, 0, 0 } : new byte[] { 0, 0, 0, paddingByteCount };
            }

            var stream = streamBuilder.ToStream();

            // Create the IFD entry and test reading the value

            var entry = new TiffIfdEntry {
                Tag = tag, Type = type, Count = count, Value = data
            };

            return(new TiffIfdEntry_Stream_Tuple(entry, stream));
        }
Exemplo n.º 3
0
        public void SizeOfIfdEntry_AlwaysReturnsTwelveBytes()
        {
            var ifdEntry = new TiffIfdEntry();

            var size = TiffReader.SizeOfIfdEntry(ifdEntry);

            Assert.Equal(12, size);
        }
Exemplo n.º 4
0
        private void WriteTiffIfdEntryInfo(TiffIfdEntry entry, Dictionary <int, string> tagDictionary)
        {
            var    tagStr  = ConvertTagToString(tagDictionary, entry.Tag);
            var    typeStr = entry.Count == 1 ? $"{entry.Type}" : $"{entry.Type}[{entry.Count}]";
            object value   = GetTiffIfdEntryValue(entry);

            if (value is Array)
            {
                value = ConvertArrayToString((Array)value);
            }

            _report.WriteLine($"{tagStr} = {value}");
        }
Exemplo n.º 5
0
        public TiffIfd GenerateIfd(StreamBuilder streamBuilder)
        {
            streamBuilder.WritePadding(6);

            var ifdEntries = _entries.Select(entryInfo =>
            {
                var entry = new TiffIfdEntry {
                    Tag = entryInfo.Tag, Type = entryInfo.Type, Count = entryInfo.Count
                };

                if (entryInfo.Data.Length <= 4)
                {
                    entry.Value = entryInfo.Data;
                }
                else
                {
                    // If the data is longer than four bytes, then write this to the stream and set the data to the offset

                    var offset = (uint)streamBuilder.Stream.Position;
                    streamBuilder.WriteBytes(entryInfo.Data);
                    entry.Value = BitConverter.GetBytes(offset).WithByteOrder(_byteOrder);
                }

                return(entry);
            });

            var preEntries = new[] { new TiffIfdEntry {
                                         Tag = 1
                                     }, new TiffIfdEntry {
                                         Tag = 2
                                     }, new TiffIfdEntry {
                                         Tag = 3
                                     } };
            var postEntries = new[] { new TiffIfdEntry {
                                          Tag = 4
                                      }, new TiffIfdEntry {
                                          Tag = 5
                                      }, new TiffIfdEntry {
                                          Tag = 6
                                      } };
            var allIfdEntries = preEntries.Concat(ifdEntries).Concat(postEntries).ToArray();


            return(new TiffIfd {
                Entries = allIfdEntries
            });
        }
Exemplo n.º 6
0
        private object GetTiffIfdEntryValue(TiffIfdEntry entry)
        {
            switch (entry.Tag)
            {
            // Use named enums if known

            case TiffTags.Compression:
                return((TiffCompression)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.ExtraSamples:
                return((TiffExtraSamples)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.FillOrder:
                return((TiffFillOrder)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.NewSubfileType:
                return((TiffNewSubfileType)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.Orientation:
                return((TiffOrientation)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.PhotometricInterpretation:
                return((TiffPhotometricInterpretation)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.PlanarConfiguration:
                return((TiffPlanarConfiguration)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.ResolutionUnit:
                return((TiffResolutionUnit)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.SubfileType:
                return((TiffSubfileType)_tiffDecoder.ReadUnsignedInteger(ref entry));

            case TiffTags.Threshholding:
                return((TiffThreshholding)_tiffDecoder.ReadUnsignedInteger(ref entry));

            // Other fields

            default:
                return(GetTiffIfdEntryData(entry));
            }
        }
Exemplo n.º 7
0
 public TiffIfdEntry_Stream_Tuple(TiffIfdEntry entry, Stream stream)
 {
     Entry  = entry;
     Stream = stream;
 }
Exemplo n.º 8
0
        private string GetTiffIfdEntryData(TiffIfdEntry entry)
        {
            switch (entry.Type)
            {
            case TiffType.Byte:
            case TiffType.Short:
            case TiffType.Long:
                if (entry.Count == 1)
                {
                    return(_tiffDecoder.ReadUnsignedInteger(ref entry).ToString());
                }
                else
                {
                    var array = _tiffDecoder.ReadUnsignedIntegerArray(ref entry);
                    return(ConvertArrayToString(array));
                }

            case TiffType.SByte:
            case TiffType.SShort:
            case TiffType.SLong:
                if (entry.Count == 1)
                {
                    return(_tiffDecoder.ReadSignedInteger(ref entry).ToString());
                }
                else
                {
                    var array = _tiffDecoder.ReadSignedIntegerArray(ref entry);
                    return(ConvertArrayToString(array));
                }

            case TiffType.Ascii:
                return("\"" + _tiffDecoder.ReadString(ref entry) + "\"");

            case TiffType.Rational:
                if (entry.Count == 1)
                {
                    return(_tiffDecoder.ReadUnsignedRational(ref entry).ToString());
                }
                else
                {
                    var array = _tiffDecoder.ReadUnsignedRationalArray(ref entry);
                    return(ConvertArrayToString(array));
                }

            case TiffType.SRational:
                if (entry.Count == 1)
                {
                    return(_tiffDecoder.ReadSignedRational(ref entry).ToString());
                }
                else
                {
                    var array = _tiffDecoder.ReadSignedRationalArray(ref entry);
                    return(ConvertArrayToString(array));
                }

            case TiffType.Float:
                if (entry.Count == 1)
                {
                    return(_tiffDecoder.ReadFloat(ref entry).ToString());
                }
                else
                {
                    var array = _tiffDecoder.ReadFloatArray(ref entry);
                    return(ConvertArrayToString(array));
                }

            case TiffType.Double:
                if (entry.Count == 1)
                {
                    return(_tiffDecoder.ReadDouble(ref entry).ToString());
                }
                else
                {
                    var array = _tiffDecoder.ReadDoubleArray(ref entry);
                    return(ConvertArrayToString(array));
                }

            case TiffType.Undefined:
                return("Undefined");

            default:
                return($"Unknown Type ({(int)entry.Type})");
            }
        }