📷 A modern, cross-platform, 2D Graphics library for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

69 lines
2.3 KiB

// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Heif;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Tests.Formats.Heif;
[Trait("Format", "Heif")]
public class HeifFrameMetadataTests
{
[Fact]
public void FormatCreatesFrameMetadata()
{
HeifFrameMetadata metadata = HeifFormat.Instance.CreateDefaultFormatFrameMetadata();
Assert.Equal(new Rational(0), metadata.FrameDelay);
}
[Fact]
public void DeepCloneCopiesFrameDelay()
{
HeifFrameMetadata metadata = new() { FrameDelay = new Rational(1, 4) };
HeifFrameMetadata clone = metadata.DeepClone();
clone.FrameDelay = new Rational(1, 2);
Assert.Equal(new Rational(1, 4), metadata.FrameDelay);
Assert.Equal(new Rational(1, 2), clone.FrameDelay);
}
[Fact]
public void DurationRoundTripsFormatConnectingMetadata()
{
FormatConnectingFrameMetadata connectingMetadata = new() { Duration = TimeSpan.FromMilliseconds(250) };
HeifFrameMetadata metadata = HeifFrameMetadata.FromFormatConnectingFrameMetadata(connectingMetadata);
FormatConnectingFrameMetadata result = metadata.ToFormatConnectingFrameMetadata();
Assert.Equal(0.25, metadata.FrameDelay.ToDouble(), 10);
Assert.Equal(TimeSpan.FromMilliseconds(250), result.Duration);
Assert.Equal(FrameBlendMode.Source, result.BlendMode);
Assert.Equal(FrameDisposalMode.DoNotDispose, result.DisposalMode);
}
[Fact]
public void ZeroDenominatorConvertsToUnspecifiedDuration()
{
HeifFrameMetadata metadata = new() { FrameDelay = new Rational(1, 0) };
FormatConnectingFrameMetadata result = metadata.ToFormatConnectingFrameMetadata();
Assert.Equal(TimeSpan.Zero, result.Duration);
}
[Fact]
public void ImageFrameMetadataExtensionsReturnAndCloneHeifMetadata()
{
using Image<Rgba32> image = new(1, 1);
HeifFrameMetadata metadata = image.Frames.RootFrame.Metadata.GetHeifMetadata();
metadata.FrameDelay = new Rational(1, 5);
HeifFrameMetadata clone = image.Frames.RootFrame.Metadata.CloneHeifMetadata();
Assert.NotSame(metadata, clone);
Assert.Equal(metadata.FrameDelay, clone.FrameDelay);
}
}