// Copyright (c) Six Labors. // Licensed under the Six Labors Split License. using SixLabors.ImageSharp.Formats.Exr; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs; namespace SixLabors.ImageSharp.Tests.Formats.Exr; [Trait("Format", "Exr")] [ValidateDisposedMemoryAllocations] public class ExrDecoderTests { private static MagickReferenceDecoder ReferenceDecoder => MagickReferenceDecoder.Exr; [Theory] [InlineData(TestImages.Exr.Uncompressed, 199, 297)] public void ExrDecoder_Identify_DetectsCorrectWidthAndHeight(string imagePath, int expectedWidth, int expectedHeight) { TestFile testFile = TestFile.Create(imagePath); using MemoryStream stream = new(testFile.Bytes, false); ImageInfo imageInfo = Image.Identify(stream); Assert.NotNull(imageInfo); Assert.Equal(expectedWidth, imageInfo.Width); Assert.Equal(expectedHeight, imageInfo.Height); } [Theory] [WithFile(TestImages.Exr.Uncompressed, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_Uncompressed_Rgba_ExrPixelType_Half(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.UncompressedFloatRgb, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_Uncompressed_Rgb_ExrPixelType_Float(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.UncompressedUintRgb, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_Uncompressed_Rgb_ExrPixelType_Uint(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.Rgb, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_Rgb(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.Gray, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_Gray(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.Zip, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_ZipCompressed(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.Zips, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_ZipsCompressed(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.Rle, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_RunLengthCompressed(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } [Theory] [WithFile(TestImages.Exr.B44, PixelTypes.Rgba32)] public void ExrDecoder_CanDecode_B44Compressed(TestImageProvider provider) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(ExrDecoder.Instance); image.DebugSave(provider); image.CompareToOriginal(provider, ReferenceDecoder); } }