Browse Source

Adding Channels and ColorSpace validations to De-/Encoder

I'm not sure the encoder is right
qoi
LuisAlfredo92 3 years ago
parent
commit
ef78f98eb3
No known key found for this signature in database GPG Key ID: 13A8436905993B8F
  1. 45
      tests/ImageSharp.Tests/Formats/Qoi/QoiDecoderTests.cs
  2. 30
      tests/ImageSharp.Tests/Formats/Qoi/QoiEncoderTests.cs

45
tests/ImageSharp.Tests/Formats/Qoi/QoiDecoderTests.cs

@ -1,6 +1,7 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.Formats.Qoi;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Tests.Formats.Qoi;
@ -10,40 +11,46 @@ namespace SixLabors.ImageSharp.Tests.Formats.Qoi;
public class QoiDecoderTests
{
[Theory]
[InlineData(TestImages.Qoi.Dice)]
[InlineData(TestImages.Qoi.EdgeCase)]
[InlineData(TestImages.Qoi.Kodim10)]
[InlineData(TestImages.Qoi.Kodim23)]
[InlineData(TestImages.Qoi.QoiLogo)]
[InlineData(TestImages.Qoi.TestCard)]
[InlineData(TestImages.Qoi.TestCardRGBA)]
[InlineData(TestImages.Qoi.Wikipedia008)]
public void Identify(string imagePath)
[InlineData(TestImages.Qoi.Dice, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[InlineData(TestImages.Qoi.EdgeCase, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[InlineData(TestImages.Qoi.Kodim10, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
[InlineData(TestImages.Qoi.Kodim23, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
[InlineData(TestImages.Qoi.QoiLogo, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[InlineData(TestImages.Qoi.TestCard, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[InlineData(TestImages.Qoi.TestCardRGBA, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[InlineData(TestImages.Qoi.Wikipedia008, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
public void Identify(string imagePath, QoiChannels channels, QoiColorSpace colorSpace)
{
TestFile testFile = TestFile.Create(imagePath);
using MemoryStream stream = new(testFile.Bytes, false);
ImageInfo imageInfo = Image.Identify(stream);
QoiMetadata qoiMetadata = imageInfo.Metadata.GetQoiMetadata();
Assert.NotNull(imageInfo);
Assert.Equal(imageInfo.Metadata.DecodedImageFormat, ImageSharp.Formats.Qoi.QoiFormat.Instance);
Assert.Equal(imageInfo.Metadata.DecodedImageFormat, QoiFormat.Instance);
Assert.Equal(qoiMetadata.Channels, channels);
Assert.Equal(qoiMetadata.ColorSpace, colorSpace);
}
[Theory]
[WithFile(TestImages.Qoi.Dice, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.EdgeCase, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.Kodim10, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.Kodim23, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.QoiLogo, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.TestCard, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.TestCardRGBA, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.Wikipedia008, PixelTypes.Rgba32)]
public void Decode<TPixel>(TestImageProvider<TPixel> provider)
[WithFile(TestImages.Qoi.Dice, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.EdgeCase, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.Kodim10, PixelTypes.Rgba32, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.Kodim23, PixelTypes.Rgba32, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.QoiLogo, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.TestCard, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.TestCardRGBA, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.Wikipedia008, PixelTypes.Rgba32, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
public void Decode<TPixel>(TestImageProvider<TPixel> provider, QoiChannels channels, QoiColorSpace colorSpace)
where TPixel : unmanaged, IPixel<TPixel>
{
using Image<TPixel> image = provider.GetImage();
QoiMetadata qoiMetadata = image.Metadata.GetQoiMetadata();
image.DebugSave(provider);
image.CompareToReferenceOutput(provider);
Assert.Equal(qoiMetadata.Channels, channels);
Assert.Equal(qoiMetadata.ColorSpace, colorSpace);
}
}

30
tests/ImageSharp.Tests/Formats/Qoi/QoiEncoderTests.cs

@ -13,24 +13,32 @@ namespace SixLabors.ImageSharp.Tests.Formats.Qoi;
public class QoiEncoderTests
{
[Theory]
[WithFile(TestImages.Qoi.Dice, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.EdgeCase, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.Kodim10, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.Kodim23, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.QoiLogo, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.TestCard, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.TestCardRGBA, PixelTypes.Rgba32)]
[WithFile(TestImages.Qoi.Wikipedia008, PixelTypes.Rgba32)]
[System.Diagnostics.CodeAnalysis.SuppressMessage("CodeQuality", "IDE0051:Quitar miembros privados no utilizados", Justification = "Function implicitly in tests")]
private static void Encode<TPixel>(TestImageProvider<TPixel> provider)
[WithFile(TestImages.Qoi.Dice, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.EdgeCase, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.Kodim10, PixelTypes.Rgba32, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.Kodim23, PixelTypes.Rgba32, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.QoiLogo, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.TestCard, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.TestCardRGBA, PixelTypes.Rgba32, QoiChannels.Rgba, QoiColorSpace.SrgbWithLinearAlpha)]
[WithFile(TestImages.Qoi.Wikipedia008, PixelTypes.Rgba32, QoiChannels.Rgb, QoiColorSpace.SrgbWithLinearAlpha)]
public static void Encode<TPixel>(TestImageProvider<TPixel> provider, QoiChannels channels, QoiColorSpace colorSpace)
where TPixel : unmanaged, IPixel<TPixel>
{
using Image<TPixel> image = provider.GetImage(new MagickReferenceDecoder());
using MemoryStream stream = new();
QoiEncoder encoder = new();
QoiEncoder encoder = new()
{
Channels = channels,
ColorSpace = colorSpace
};
image.Save(stream, encoder);
stream.Position = 0;
using Image<TPixel> encodedImage = (Image<TPixel>)Image.Load(stream);
QoiMetadata qoiMetadata = encodedImage.Metadata.GetQoiMetadata();
ImageComparer.Exact.CompareImages(image, encodedImage);
Assert.Equal(qoiMetadata.Channels, channels);
Assert.Equal(qoiMetadata.ColorSpace, colorSpace);
}
}

Loading…
Cancel
Save