Browse Source

deep cloning

pull/2363/head
Ildar Khayrutdinov 3 years ago
parent
commit
308bfa448f
  1. 5
      src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs
  2. 1
      src/ImageSharp/Formats/Tiff/TiffFrameMetadata.cs
  3. 17
      src/ImageSharp/Formats/Tiff/TiffMetadata.cs

5
src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs

@ -28,6 +28,7 @@ internal static class TiffDecoderMetadataCreator
if (!ignoreMetadata)
{
var tiffMetadata = imageMetaData.GetTiffMetadata();
var framesMetadata = new List<TiffFrameMetadata>(frames.Count);
for (int i = 0; i < frames.Count; i++)
{
ImageFrameMetadata frameMetaData = frames[i];
@ -46,8 +47,10 @@ internal static class TiffDecoderMetadataCreator
frameMetaData.IccProfile = new IccProfile(iccProfileBytes.Value);
}
tiffMetadata.Frames.Add(frameMetaData.GetTiffMetadata());
framesMetadata.Add(frameMetaData.GetTiffMetadata());
}
tiffMetadata.Frames = framesMetadata;
}
return imageMetaData;

1
src/ImageSharp/Formats/Tiff/TiffFrameMetadata.cs

@ -28,6 +28,7 @@ public class TiffFrameMetadata : IDeepCloneable
this.Compression = other.Compression;
this.PhotometricInterpretation = other.PhotometricInterpretation;
this.Predictor = other.Predictor;
this.InkSet = other.InkSet;
}
/// <summary>

17
src/ImageSharp/Formats/Tiff/TiffMetadata.cs

@ -19,7 +19,20 @@ public class TiffMetadata : IDeepCloneable
/// Initializes a new instance of the <see cref="TiffMetadata"/> class.
/// </summary>
/// <param name="other">The metadata to create an instance from.</param>
private TiffMetadata(TiffMetadata other) => this.ByteOrder = other.ByteOrder;
private TiffMetadata(TiffMetadata other)
{
this.ByteOrder = other.ByteOrder;
this.FormatType = other.FormatType;
var frames = new List<TiffFrameMetadata>(other.Frames.Count);
foreach (var otherFrame in other.Frames)
{
var frame = (TiffFrameMetadata)otherFrame.DeepClone();
frames.Add(frame);
}
this.Frames = frames;
}
/// <summary>
/// Gets or sets the byte order.
@ -37,7 +50,7 @@ public class TiffMetadata : IDeepCloneable
/// <value>
/// The frames.
/// </value>
public IList<TiffFrameMetadata> Frames { get; set; } = new List<TiffFrameMetadata>();
public IReadOnlyList<TiffFrameMetadata> Frames { get; set; } = Array.Empty<TiffFrameMetadata>();
/// <inheritdoc/>
public IDeepCloneable DeepClone() => new TiffMetadata(this);

Loading…
Cancel
Save