diff --git a/src/ImageSharp/Processing/ColorMatrix/Opacity.cs b/src/ImageSharp/Processing/ColorMatrix/Opacity.cs
index b310b4b915..b59c068905 100644
--- a/src/ImageSharp/Processing/ColorMatrix/Opacity.cs
+++ b/src/ImageSharp/Processing/ColorMatrix/Opacity.cs
@@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp
public static partial class ImageExtensions
{
///
- /// Alters the alpha component of the image.
+ /// Multiplies the alpha component of the image.
///
/// The pixel format.
/// The image this method extends.
@@ -25,7 +25,7 @@ namespace SixLabors.ImageSharp
=> source.ApplyProcessor(new OpacityProcessor(amount));
///
- /// Alters the alpha component of the image.
+ /// Multiplies the alpha component of the image.
///
/// The pixel format.
/// The image this method extends.
diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs
index b1eea79d80..362df2be68 100644
--- a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs
@@ -51,13 +51,15 @@ namespace SixLabors.ImageSharp.Tests
TestBmpEncoderCore(provider, bitsPerPixel);
}
+
+
private static void TestBmpEncoderCore(TestImageProvider provider, BmpBitsPerPixel bitsPerPixel)
where TPixel : struct, IPixel
- {
+ {
using (Image image = provider.GetImage())
{
// there is no alpha in bmp!
- image.Mutate(c => c.Opacity(1));
+ image.Mutate(c => c.MakeOpaque());
var encoder = new BmpEncoder { BitsPerPixel = bitsPerPixel };
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs
index 8610356b56..10657ea78f 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs
@@ -80,7 +80,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
using (Image image = provider.GetImage())
{
// There is no alpha in Jpeg!
- image.Mutate(c => c.Opacity(1));
+ image.Mutate(c => c.MakeOpaque());
var encoder = new JpegEncoder()
{
diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs
index 28f156279c..c4f9b0debb 100644
--- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs
@@ -123,26 +123,27 @@ namespace SixLabors.ImageSharp.Tests
{
if (!HasAlpha(pngColorType))
{
- image.Mutate(c => c.Opacity(1));
+ image.Mutate(c => c.MakeOpaque());
}
var encoder = new PngEncoder { PngColorType = pngColorType, CompressionLevel = compressionLevel};
- string pngColorTypeInfo = appendPixelType ? pngColorType.ToString() : "";
+ string pngColorTypeInfo = appendPngColorType ? pngColorType.ToString() : "";
string compressionLevelInfo = appendCompressionLevel ? $"_C{compressionLevel}" : "";
string debugInfo = $"{pngColorTypeInfo}{compressionLevelInfo}";
- string referenceInfo = $"{pngColorTypeInfo}";
-
+
// Does DebugSave & load reference CompareToReferenceInput():
- string path = ((ITestImageProvider)provider).Utility.SaveTestOutputFile(image, "png", encoder, debugInfo, appendPixelType);
+ string actualOutputFile = ((ITestImageProvider)provider).Utility.SaveTestOutputFile(image, "png", encoder, debugInfo, appendPixelType);
- IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(path);
- string referenceOutputFile = ((ITestImageProvider)provider).Utility.GetReferenceOutputFileName("png", referenceInfo, appendPixelType);
+ IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile);
- using (var encodedImage = Image.Load(referenceOutputFile, referenceDecoder))
+ using (var actualImage = Image.Load(actualOutputFile, referenceDecoder))
{
- ImageComparer comparer = pngColorType== PngColorType.Palette ? ImageComparer.Tolerant(ToleranceThresholdForPaletteEncoder) : ImageComparer.Exact;
- comparer.CompareImagesOrFrames(image, encodedImage);
+ ImageComparer comparer = pngColorType == PngColorType.Palette
+ ? ImageComparer.Tolerant(ToleranceThresholdForPaletteEncoder)
+ : ImageComparer.Exact;
+
+ comparer.VerifySimilarity(image, actualImage);
}
}
}
diff --git a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs
index 33dbc911e4..6f15cf439e 100644
--- a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs
@@ -22,6 +22,38 @@ namespace SixLabors.ImageSharp.Tests
public static class TestImageExtensions
{
+ ///
+ /// TODO: This should be a common processing method! The image.Opacity(val) multiplies the alpha channel!
+ ///
+ ///
+ ///
+ public static void MakeOpaque(this IImageProcessingContext ctx)
+ where TPixel : struct, IPixel
+ {
+ ctx.Apply(
+ img =>
+ {
+ using (var temp = new Buffer2D(img.Width, img.Height))
+ {
+ Span tempSpan = temp.Span;
+ foreach (ImageFrame frame in img.Frames)
+ {
+ Span pixelSpan = frame.GetPixelSpan();
+
+ PixelOperations.Instance.ToVector4(pixelSpan, tempSpan, pixelSpan.Length);
+
+ for (int i = 0; i < tempSpan.Length; i++)
+ {
+ ref Vector4 v = ref tempSpan[i];
+ v.W = 1.0f;
+ }
+
+ PixelOperations.Instance.PackFromVector4(tempSpan, pixelSpan, pixelSpan.Length);
+ }
+ }
+ });
+ }
+
///
/// Saves the image only when not running in the CI server.
///
@@ -357,18 +389,13 @@ namespace SixLabors.ImageSharp.Tests
)
where TPixel : struct, IPixel
{
+ string actualOutputFile = provider.Utility.SaveTestOutputFile(image, extension, encoder, testOutputDetails, appendPixelTypeToFileName);
+ IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile);
- provider.Utility.SaveTestOutputFile(image, extension, encoder, testOutputDetails, appendPixelTypeToFileName);
-
- referenceImageExtension = referenceImageExtension ?? extension;
- string referenceOutputFile = provider.Utility.GetReferenceOutputFileName(referenceImageExtension, testOutputDetails, appendPixelTypeToFileName);
-
- IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(referenceOutputFile);
-
- using (var encodedImage = Image.Load(referenceOutputFile, referenceDecoder))
+ using (var actualImage = Image.Load(actualOutputFile, referenceDecoder))
{
ImageComparer comparer = customComparer ?? ImageComparer.Exact;
- comparer.CompareImagesOrFrames(image, encodedImage);
+ comparer.VerifySimilarity(actualImage, image);
}
}
diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs
index dde34fcc43..c67e4e06bf 100644
--- a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs
@@ -56,7 +56,7 @@ namespace SixLabors.ImageSharp.Tests
{
if (pngColorType != PngColorType.RgbWithAlpha)
{
- sourceImage.Mutate(c => c.Opacity(1));
+ sourceImage.Mutate(c => c.MakeOpaque());
}
var encoder = new PngEncoder() { PngColorType = pngColorType };
@@ -93,12 +93,12 @@ namespace SixLabors.ImageSharp.Tests
using (Image original = provider.GetImage())
{
- original.Mutate(c => c.Opacity(1));
+ original.Mutate(c => c.MakeOpaque());
using (var sdBitmap = new System.Drawing.Bitmap(path))
{
using (Image resaved = SystemDrawingBridge.FromFromRgb24SystemDrawingBitmap(sdBitmap))
{
- resaved.Mutate(c => c.Opacity(1));
+ resaved.Mutate(c => c.MakeOpaque());
ImageComparer comparer = ImageComparer.Exact;
comparer.VerifySimilarity(original, resaved);
}