Browse Source

reference encoder is unnecessary

af/merge-core
Anton Firszov 8 years ago
parent
commit
79bba7b4e4
  1. 60
      tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceEncoder.cs
  2. 17
      tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs

60
tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceEncoder.cs

@ -1,60 +0,0 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using System;
using System.IO;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.PixelFormats;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using ImageMagick;
using SixLabors.ImageSharp.Advanced;
namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs
{
public class MagickReferenceEncoder : IImageEncoder
{
public MagickReferenceEncoder(MagickFormat format)
{
this.Format = format;
}
public MagickFormat Format { get; }
public void Encode<TPixel>(Image<TPixel> image, Stream stream)
where TPixel : struct, IPixel<TPixel>
{
var black = MagickColor.FromRgba(0, 0, 0, 255);
using (var magickImage = new MagickImage(black, image.Width, image.Height))
{
bool isDeep = Unsafe.SizeOf<TPixel>() > 4;
magickImage.Depth = isDeep ? 16 : 8;
Span<TPixel> allPixels = image.GetPixelSpan();
using (IPixelCollection magickPixels = magickImage.GetPixelsUnsafe())
{
if (isDeep)
{
ushort[] data = new ushort[allPixels.Length * 4];
Span<Rgba64> dataSpan = MemoryMarshal.Cast<ushort, Rgba64>(data);
PixelOperations<TPixel>.Instance.ToRgba64(allPixels, dataSpan, allPixels.Length);
magickPixels.SetPixels(data);
}
else
{
byte[] data = new byte[allPixels.Length * 4];
PixelOperations<TPixel>.Instance.ToRgba32Bytes(allPixels, data, allPixels.Length);
magickPixels.SetPixels(data);
}
}
magickImage.Write(stream, this.Format);
}
}
}
}

17
tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs

@ -1,7 +1,6 @@
// Copyright (c) Six Labors and contributors. // Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using ImageMagick;
using Xunit; using Xunit;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
@ -86,21 +85,5 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.Tests
} }
} }
} }
[Theory]
[WithTestPatternImages(100, 100, PixelTypesToTest32, MagickFormat.Png)]
[WithTestPatternImages(100, 100, PixelTypesToTest32, MagickFormat.Jpg)]
public void MagickEncode_8BitDepthImage<TPixel>(TestImageProvider<TPixel> provider, MagickFormat format)
where TPixel : struct, IPixel<TPixel>
{
string extension = format.ToString().ToLower();
var encoder = new MagickReferenceEncoder(format);
using (Image<TPixel> image = provider.GetImage())
{
image.VerifyEncoder(provider, extension, $"{format}", encoder, referenceDecoder: new SystemDrawingReferenceDecoder());
}
}
} }
} }
Loading…
Cancel
Save