Browse Source

refactored QuantizeImageShouldPreserveMaximumColorPrecision (hope it uses less memory now)

af/merge-core
Anton Firszov 9 years ago
parent
commit
76dbd64dfe
  1. 90
      tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs

90
tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs

@ -13,7 +13,9 @@ using Xunit;
namespace SixLabors.ImageSharp.Tests namespace SixLabors.ImageSharp.Tests
{ {
using System; using System;
using System.Reflection;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Quantization; using SixLabors.ImageSharp.Processing.Quantization;
@ -61,44 +63,72 @@ namespace SixLabors.ImageSharp.Tests
} }
} }
[Fact] public static readonly TheoryData<string> QuantizerNames =
public void QuantizeImageShouldPreserveMaximumColorPrecision() new TheoryData<string>
{ {
string path = TestEnvironment.CreateOutputDirectory("Quantize"); nameof(KnownQuantizers.Octree),
nameof(KnownQuantizers.Palette),
nameof(KnownQuantizers.Wu)
};
foreach (TestFile file in Files) [Theory]
{ [WithFile(TestImages.Png.CalliphoraPartial, nameof(QuantizerNames), PixelTypes.Rgba32)]
using (Image<Rgba32> srcImage = Image.Load<Rgba32>(file.Bytes, out var mimeType)) [WithFile(TestImages.Png.Bike, nameof(QuantizerNames), PixelTypes.Rgba32)]
{ public void QuantizeImageShouldPreserveMaximumColorPrecision<TPixel>(TestImageProvider<TPixel> provider, string quantizerName)
using (Image<Rgba32> image = srcImage.Clone()) where TPixel:struct,IPixel<TPixel>
{
using (FileStream output = File.OpenWrite($"{path}/Octree-{file.FileName}"))
{ {
image.Mutate(x => x.Quantize(KnownQuantizers.Octree)); provider.Configuration.MemoryManager = ArrayPoolMemoryManager.CreateWithModeratePooling();
image.Save(output, mimeType);
} IQuantizer quantizer = GetQuantizer(quantizerName);
}
using (Image<Rgba32> image = srcImage.Clone()) using (Image<TPixel> image = provider.GetImage())
{
using (FileStream output = File.OpenWrite($"{path}/Wu-{file.FileName}"))
{ {
image.Mutate(x => x.Quantize(KnownQuantizers.Wu)); image.Mutate(c => c.Quantize(quantizer));
image.Save(output, mimeType); image.DebugSave(provider);
}
} }
using (Image<Rgba32> image = srcImage.Clone()) provider.Configuration.MemoryManager.ReleaseRetainedResources();
{
using (FileStream output = File.OpenWrite($"{path}/Palette-{file.FileName}")) //string path = TestEnvironment.CreateOutputDirectory("Quantize");
{
image.Mutate(x => x.Quantize(KnownQuantizers.Palette)); //foreach (TestFile file in Files)
image.Save(output, mimeType); //{
} // using (Image<Rgba32> srcImage = Image.Load<Rgba32>(file.Bytes, out IImageFormat mimeType))
} // {
} // using (Image<Rgba32> image = srcImage.Clone())
} // {
// using (FileStream output = File.OpenWrite($"{path}/Octree-{file.FileName}"))
// {
// image.Mutate(x => x.Quantize(KnownQuantizers.Octree));
// image.Save(output, mimeType);
// }
// }
// using (Image<Rgba32> image = srcImage.Clone())
// {
// using (FileStream output = File.OpenWrite($"{path}/Wu-{file.FileName}"))
// {
// image.Mutate(x => x.Quantize(KnownQuantizers.Wu));
// image.Save(output, mimeType);
// }
// }
// using (Image<Rgba32> image = srcImage.Clone())
// {
// using (FileStream output = File.OpenWrite($"{path}/Palette-{file.FileName}"))
// {
// image.Mutate(x => x.Quantize(KnownQuantizers.Palette));
// image.Save(output, mimeType);
// }
// }
// }
//}
}
private static IQuantizer GetQuantizer(string name)
{
PropertyInfo property = typeof(KnownQuantizers).GetTypeInfo().GetProperty(name);
return (IQuantizer) property.GetMethod.Invoke(null, new object[0]);
} }
[Fact] [Fact]

Loading…
Cancel
Save