mirror of https://github.com/SixLabors/ImageSharp
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.
70 lines
2.8 KiB
70 lines
2.8 KiB
// <copyright file="YCbCrImageTests.cs" company="James Jackson-South">
|
|
// Copyright (c) James Jackson-South and contributors.
|
|
// Licensed under the Apache License, Version 2.0.
|
|
// </copyright>
|
|
|
|
namespace ImageSharp.Tests
|
|
{
|
|
using ImageSharp.Formats.Jpg;
|
|
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
public class YCbCrImageTests
|
|
{
|
|
public YCbCrImageTests(ITestOutputHelper output)
|
|
{
|
|
this.Output = output;
|
|
}
|
|
|
|
private ITestOutputHelper Output { get; }
|
|
|
|
private void PrintChannel(string name, JpegPixelArea channel)
|
|
{
|
|
this.Output.WriteLine($"{name}: Stride={channel.Stride}");
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio410, 4, 2)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio411, 4, 1)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio420, 2, 2)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio422, 2, 1)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio440, 1, 2)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio444, 1, 1)]
|
|
public void CalculateChrominanceSize(int ratioValue, int expectedDivX, int expectedDivY)
|
|
{
|
|
YCbCrImage.YCbCrSubsampleRatio ratio = (YCbCrImage.YCbCrSubsampleRatio)ratioValue;
|
|
|
|
//this.Output.WriteLine($"RATIO: {ratio}");
|
|
Size size = YCbCrImage.CalculateChrominanceSize(400, 400, ratio);
|
|
//this.Output.WriteLine($"Ch Size: {size}");
|
|
|
|
Assert.Equal(new Size(400/expectedDivX, 400/expectedDivY), size);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio410, 4)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio411, 4)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio420, 2)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio422, 2)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio440, 1)]
|
|
[InlineData(YCbCrImage.YCbCrSubsampleRatio.YCbCrSubsampleRatio444, 1)]
|
|
public void Create(int ratioValue, int expectedCStrideDiv)
|
|
{
|
|
YCbCrImage.YCbCrSubsampleRatio ratio = (YCbCrImage.YCbCrSubsampleRatio)ratioValue;
|
|
|
|
this.Output.WriteLine($"RATIO: {ratio}");
|
|
|
|
YCbCrImage img = new YCbCrImage(400, 400, ratio);
|
|
|
|
//this.PrintChannel("Y", img.YChannel);
|
|
//this.PrintChannel("Cb", img.CbChannel);
|
|
//this.PrintChannel("Cr", img.CrChannel);
|
|
|
|
Assert.Equal(img.YChannel.Width, 400);
|
|
Assert.Equal(img.CbChannel.Width, 400 / expectedCStrideDiv);
|
|
Assert.Equal(img.CrChannel.Width, 400 / expectedCStrideDiv);
|
|
}
|
|
|
|
}
|
|
}
|