Skip to content

Commit d6106a1

Browse files
committed
Update to Magick.NET-Q16-AnyCPU 14.10.1
1 parent f1c10f8 commit d6106a1

File tree

4 files changed

+107
-6
lines changed

4 files changed

+107
-6
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ obj/
66
*.DotSettings.user
77
.idea/
88
*.received.*
9-
nugets/
9+
nugets/
10+
src/nul

src/Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project>
33
<PropertyGroup>
44
<NoWarn>CS1591</NoWarn>
5-
<Version>3.8.1</Version>
5+
<Version>3.8.2</Version>
66
<AssemblyVersion>1.0.0</AssemblyVersion>
77
<ImplicitUsings>enable</ImplicitUsings>
88
<LangVersion>preview</LangVersion>
@@ -13,4 +13,4 @@
1313
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
1414
<SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
1515
</PropertyGroup>
16-
</Project>
16+
</Project>

src/Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
55
</PropertyGroup>
66
<ItemGroup>
7-
<PackageVersion Include="Magick.NET-Q16-AnyCPU" Version="14.10.0" />
7+
<PackageVersion Include="Magick.NET-Q16-AnyCPU" Version="14.10.1" />
88
<PackageVersion Include="MarkdownSnippets.MsBuild" Version="28.0.0-beta.10" />
99
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
1010
<PackageVersion Include="NUnit" Version="4.4.0" />
11-
<PackageVersion Include="NUnit3TestAdapter" Version="5.2.0" Pinned="true"/>
11+
<PackageVersion Include="NUnit3TestAdapter" Version="5.2.0" Pinned="true" />
1212
<PackageVersion Include="Polyfill" Version="9.5.0" />
1313
<PackageVersion Include="ProjectDefaults" Version="1.0.170" />
1414
<PackageVersion Include="Verify" Version="31.9.3" />
1515
<PackageVersion Include="Verify.DiffPlex" Version="3.1.2" />
1616
<PackageVersion Include="Verify.Nunit" Version="31.9.3" />
1717
<PackageVersion Include="Microsoft.Sbom.Targets" Version="4.1.5" />
1818
</ItemGroup>
19-
</Project>
19+
</Project>

src/Tests/Tests.cs

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,106 @@ public Task CompareDifferent()
5252
return Verify(compare);
5353
}
5454

55+
// https://github.com/VerifyTests/Verify.ImageMagick/issues/754
56+
// Regression test: Ensure image comparisons correctly detect differences
57+
// regardless of the threshold value (as long as diff > threshold)
58+
[Test]
59+
public async Task Issue754_DifferentImagesShouldNotBeEqual()
60+
{
61+
// Simulate UI screenshot comparison - white background with different text positions
62+
using var image1 = new MagickImage(MagickColors.White, 200, 100);
63+
using var text1 = new MagickImage(MagickColors.Black, 80, 20);
64+
image1.Composite(text1, 10, 40, CompositeOperator.Over); // Text on left
65+
66+
using var image2 = new MagickImage(MagickColors.White, 200, 100);
67+
using var text2 = new MagickImage(MagickColors.Black, 80, 20);
68+
image2.Composite(text2, 110, 40, CompositeOperator.Over); // Text on right
69+
70+
var stream1 = new MemoryStream();
71+
var stream2 = new MemoryStream();
72+
image1.Write(stream1, MagickFormat.Png);
73+
image2.Write(stream2, MagickFormat.Png);
74+
stream1.Position = 0;
75+
stream2.Position = 0;
76+
77+
// Get raw diff to understand the magnitude
78+
using var img1 = new MagickImage(stream1);
79+
using var img2 = new MagickImage(stream2);
80+
var rawDiff = img1.Compare(img2, ErrorMetric.Fuzz);
81+
82+
stream1.Position = 0;
83+
stream2.Position = 0;
84+
85+
// With an extremely small threshold, different images MUST be detected
86+
var threshold = 0.00000000000001;
87+
var compare = await VerifyImageMagick.Compare(threshold, ErrorMetric.Fuzz, stream1, stream2);
88+
89+
Assert.That(compare.IsEqual, Is.False,
90+
$"Different images (diff={rawDiff}) should be detected with threshold={threshold}");
91+
}
92+
93+
// https://github.com/VerifyTests/Verify.ImageMagick/issues/754
94+
// Test that threshold=0 and tiny threshold behave consistently
95+
[Test]
96+
public async Task Issue754_ZeroVsNonZeroThreshold()
97+
{
98+
using var image1 = new MagickImage(MagickColors.White, 100, 100);
99+
using var image2 = new MagickImage(MagickColors.White, 100, 100);
100+
101+
// Add a visible difference - 10x10 black square
102+
using var diff = new MagickImage(MagickColors.Black, 10, 10);
103+
image2.Composite(diff, 45, 45, CompositeOperator.Over);
104+
105+
var stream1 = new MemoryStream();
106+
var stream2 = new MemoryStream();
107+
image1.Write(stream1, MagickFormat.Png);
108+
image2.Write(stream2, MagickFormat.Png);
109+
110+
// Compare with threshold = 0
111+
stream1.Position = 0;
112+
stream2.Position = 0;
113+
var compareZero = await VerifyImageMagick.Compare(0, ErrorMetric.Fuzz, stream1, stream2);
114+
115+
// Compare with tiny non-zero threshold
116+
stream1.Position = 0;
117+
stream2.Position = 0;
118+
var compareTiny = await VerifyImageMagick.Compare(0.00000000000001, ErrorMetric.Fuzz, stream1, stream2);
119+
120+
// Both should detect the difference
121+
Assert.Multiple(() =>
122+
{
123+
Assert.That(compareZero.IsEqual, Is.False, "Threshold=0 should detect difference");
124+
Assert.That(compareTiny.IsEqual, Is.False, "Tiny threshold should detect difference");
125+
});
126+
}
127+
128+
// https://github.com/VerifyTests/Verify.ImageMagick/issues/754
129+
// Verify RootMeanSquared works as a reliable alternative
130+
[Test]
131+
public async Task Issue754_RootMeanSquaredAsAlternative()
132+
{
133+
using var image1 = new MagickImage(MagickColors.White, 100, 100);
134+
using var block1 = new MagickImage(MagickColors.Gray, 20, 20);
135+
image1.Composite(block1, 10, 10, CompositeOperator.Over);
136+
137+
using var image2 = new MagickImage(MagickColors.White, 100, 100);
138+
using var block2 = new MagickImage(MagickColors.Gray, 20, 20);
139+
image2.Composite(block2, 70, 70, CompositeOperator.Over);
140+
141+
var stream1 = new MemoryStream();
142+
var stream2 = new MemoryStream();
143+
image1.Write(stream1, MagickFormat.Png);
144+
image2.Write(stream2, MagickFormat.Png);
145+
stream1.Position = 0;
146+
stream2.Position = 0;
147+
148+
var threshold = 0.00000000000001;
149+
var compare = await VerifyImageMagick.Compare(threshold, ErrorMetric.RootMeanSquared, stream1, stream2);
150+
151+
Assert.That(compare.IsEqual, Is.False,
152+
"RootMeanSquared should detect positional differences");
153+
}
154+
55155
[Test]
56156
public Task VerifyPdf() =>
57157
VerifyFile("sample.pdf");

0 commit comments

Comments
 (0)