Skip to content

Commit a9b2645

Browse files
authored
Merge pull request #59 from Codeuctivity/dependabot/nuget/SkiaSharp-3.119.0
Bump SkiaSharp from 3.116.1 to 3.119.0
2 parents 76957d5 + b1947d7 commit a9b2645

File tree

6 files changed

+127
-34
lines changed

6 files changed

+127
-34
lines changed

.github/FUNDING.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# These are supported funding model platforms
2+
3+
github: [Codeuctivity]
4+
patreon: # Replace with a single Patreon username
5+
open_collective: # Replace with a single Open Collective username
6+
ko_fi: # Replace with a single Ko-fi username
7+
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8+
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9+
liberapay: # Replace with a single Liberapay username
10+
issuehunt: # Replace with a single IssueHunt username
11+
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12+
polar: # Replace with a single Polar username
13+
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
14+
thanks_dev: # Replace with a single thanks.dev username
15+
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

.github/workflows/dotnet.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: .NET build and test
22
env:
3-
CURRENT_VERSION: 2.0.${{ github.run_number }}
3+
CURRENT_VERSION: 2.1.${{ github.run_number }}
44
LAST_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
55

66
on:
@@ -20,6 +20,7 @@ jobs:
2020
with:
2121
dotnet-version: |
2222
8.0.x
23+
9.0.x
2324
- name: Check formatting
2425
run: dotnet format --verify-no-changes
2526
- name: Restore dependencies
@@ -40,6 +41,7 @@ jobs:
4041
with:
4142
dotnet-version: |
4243
8.0.x
44+
9.0.x
4345
- name: Restore dependencies
4446
run: dotnet restore
4547
- name: Build
@@ -69,6 +71,7 @@ jobs:
6971
with:
7072
dotnet-version: |
7173
8.0.x
74+
9.0.x
7275
- name: Restore dependencies
7376
run: dotnet restore
7477
- name: Build

SkiaSharpCompare/SkiaSharpCompare.cs

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,25 @@ public static bool ImagesAreEqual(SKBitmap actual, SKBitmap expected, ResizeOpti
102102
{
103103
for (var y = 0; y < actual.Height; y++)
104104
{
105-
if (!actual.GetPixel(x, y).Equals(expected.GetPixel(x, y)))
105+
if (pixelColorShiftTolerance == 0 && !actual.GetPixel(x, y).Equals(expected.GetPixel(x, y)))
106106
{
107107
return false;
108108
}
109+
else
110+
{
111+
var actualPixel = actual.GetPixel(x, y);
112+
var expectedPixel = expected.GetPixel(x, y);
113+
114+
var r = Math.Abs(expectedPixel.Red - actualPixel.Red);
115+
var g = Math.Abs(expectedPixel.Green - actualPixel.Green);
116+
var b = Math.Abs(expectedPixel.Blue - actualPixel.Blue);
117+
var sum = r + g + b;
118+
119+
if (sum > pixelColorShiftTolerance)
120+
{
121+
return false;
122+
}
123+
}
109124
}
110125
}
111126

@@ -472,7 +487,26 @@ public static SKBitmap CalcDiffMaskImage(SKBitmap actual, SKBitmap expected, Res
472487
var blue = (byte)Math.Abs(actualPixel.Blue - expectedPixel.Blue);
473488
var pixel = new SKColor(red, green, blue);
474489

475-
maskImage.SetPixel(x, y, pixel);
490+
if (pixelColorShiftTolerance == 0)
491+
{
492+
maskImage.SetPixel(x, y, pixel);
493+
}
494+
else
495+
{
496+
var r = Math.Abs(expectedPixel.Red - actualPixel.Red);
497+
var g = Math.Abs(expectedPixel.Green - actualPixel.Green);
498+
var b = Math.Abs(expectedPixel.Blue - actualPixel.Blue);
499+
var sum = r + g + b;
500+
501+
if (sum > pixelColorShiftTolerance)
502+
{
503+
maskImage.SetPixel(x, y, pixel);
504+
}
505+
else
506+
{
507+
maskImage.SetPixel(x, y, 0);
508+
}
509+
}
476510
}
477511
}
478512
return maskImage;
@@ -527,7 +561,26 @@ public static SKBitmap CalcDiffMaskImage(SKBitmap actual, SKBitmap expected, SKB
527561
var blue = (byte)(Math.Abs(actualPixel.Blue - expectedPixel.Blue) - maskPixel.Blue);
528562
var pixel = new SKColor(red, green, blue);
529563

530-
maskImage.SetPixel(x, y, pixel);
564+
if (pixelColorShiftTolerance == 0)
565+
{
566+
maskImage.SetPixel(x, y, pixel);
567+
}
568+
else
569+
{
570+
var r = Math.Abs(expectedPixel.Red - actualPixel.Red);
571+
var g = Math.Abs(expectedPixel.Green - actualPixel.Green);
572+
var b = Math.Abs(expectedPixel.Blue - actualPixel.Blue);
573+
var sum = r + g + b;
574+
575+
if (sum > pixelColorShiftTolerance)
576+
{
577+
maskImage.SetPixel(x, y, pixel);
578+
}
579+
else
580+
{
581+
maskImage.SetPixel(x, y, 0);
582+
}
583+
}
531584
}
532585
}
533586
return maskImage;
@@ -551,8 +604,8 @@ private static (SKBitmap, SKBitmap) GrowToSameDimension(SKBitmap actual, SKBitma
551604
var biggestWidth = actual.Width > expected.Width ? actual.Width : expected.Width;
552605
var biggestHeight = actual.Height > expected.Height ? actual.Height : expected.Height;
553606
var skSize = new SKSizeI(biggestWidth, biggestHeight);
554-
var grownExpected = expected.Resize(skSize, SKFilterQuality.None);
555-
var grownActual = actual.Resize(skSize, SKFilterQuality.None);
607+
var grownExpected = expected.Resize(skSize, SKSamplingOptions.Default);
608+
var grownActual = actual.Resize(skSize, SKSamplingOptions.Default);
556609

557610
return (grownActual, grownExpected);
558611
}
@@ -564,9 +617,9 @@ private static (SKBitmap, SKBitmap, SKBitmap) GrowToSameDimension(SKBitmap actua
564617
var biggestHeight = actual.Height > expected.Height ? actual.Height : expected.Height;
565618
biggestHeight = biggestHeight > mask.Height ? biggestHeight : mask.Height;
566619
var skSize = new SKSizeI(biggestWidth, biggestHeight);
567-
var grownExpected = expected.Resize(skSize, SKFilterQuality.None);
568-
var grownActual = actual.Resize(skSize, SKFilterQuality.None);
569-
var grownMask = mask.Resize(skSize, SKFilterQuality.None);
620+
var grownExpected = expected.Resize(skSize, SKSamplingOptions.Default);
621+
var grownActual = actual.Resize(skSize, SKSamplingOptions.Default);
622+
var grownMask = mask.Resize(skSize, SKSamplingOptions.Default);
570623

571624
return (grownActual, grownExpected, grownMask);
572625
}

SkiaSharpCompare/SkiaSharpCompare.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>net8.0</TargetFrameworks>
3+
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<RepositoryUrl>https://github.com/Codeuctivity/SkiaSharp.Compare</RepositoryUrl>
@@ -46,9 +46,9 @@
4646

4747
<ItemGroup>
4848
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="all" />
49-
<PackageReference Include="SkiaSharp" Version="3.116.1" />
50-
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="3.116.1" />
51-
<PackageReference Include="SonarAnalyzer.CSharp" Version="9.18.0.83559">
49+
<PackageReference Include="SkiaSharp" Version="3.119.0" />
50+
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="3.119.0" />
51+
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.8.0.113526">
5252
<PrivateAssets>all</PrivateAssets>
5353
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
5454
</PackageReference>

SkiaSharpCompareTestNunit/SkiaSharpCompareTestNunit.cs

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,15 @@ public void ShouldVerifyThatImageStreamsSizeAreEqual(string pathActual, string p
7070
}
7171

7272
[Test]
73-
[TestCase(jpg0Rgb24, jpg0Rgb24)]
74-
[TestCase(png0Rgba32, png0Rgba32)]
75-
public void ShouldVerifyThatImagesAreEqual(string pathActual, string pathExpected)
73+
[TestCase(jpg0Rgb24, jpg0Rgb24, 0)]
74+
[TestCase(png0Rgba32, png0Rgba32, 0)]
75+
[TestCase(colorShift1, colorShift2, 15)]
76+
public void ShouldVerifyThatImagesAreEqual(string pathActual, string pathExpected, int pixelColorShiftTolerance)
7677
{
7778
var absolutePathActual = Path.Combine(AppContext.BaseDirectory, pathActual);
7879
var absolutePathExpected = Path.Combine(AppContext.BaseDirectory, pathExpected);
7980

80-
Assert.That(Compare.ImagesAreEqual(absolutePathActual, absolutePathExpected), Is.True);
81+
Assert.That(Compare.ImagesAreEqual(absolutePathActual, absolutePathExpected, pixelColorShiftTolerance: pixelColorShiftTolerance), Is.True);
8182
}
8283

8384
[Test]
@@ -209,7 +210,7 @@ public void Diffmask(string pathPic1, string pathPic2, int expectedMeanError, in
209210
using (var fileStreamDifferenceMask = File.Create(differenceMask))
210211
using (var maskImage = Compare.CalcDiffMaskImage(absolutePathPic1, absolutePathPic2, resizeOption))
211212
{
212-
SaveAsPng(maskImage, fileStreamDifferenceMask);
213+
IntegrationTest.SaveAsPng(maskImage, fileStreamDifferenceMask);
213214
}
214215

215216
var maskedDiff = Compare.CalcDiff(absolutePathPic1, absolutePathPic2, differenceMask, resizeOption);
@@ -221,7 +222,7 @@ public void Diffmask(string pathPic1, string pathPic2, int expectedMeanError, in
221222
Assert.That(maskedDiff.PixelErrorPercentage, Is.EqualTo(expectedPixelErrorPercentage), "PixelErrorPercentage");
222223
}
223224

224-
private void SaveAsPng(SKBitmap maskImage, FileStream fileStreamDifferenceMask)
225+
private static void SaveAsPng(SKBitmap maskImage, FileStream fileStreamDifferenceMask)
225226
{
226227
var encodedData = maskImage.Encode(SKEncodedImageFormat.Png, 100);
227228
encodedData.SaveTo(fileStreamDifferenceMask);
@@ -243,7 +244,7 @@ public void ShouldCalcDiffMaskSKBitmapAndUseOutcome(string pathPic1, string path
243244
using (var fileStreamDifferenceMask = File.Create(differenceMaskPicPath))
244245
using (var maskImage = Compare.CalcDiffMaskImage(absolutePic1, absolutePic2, resizeOption))
245246
{
246-
SaveAsPng(maskImage, fileStreamDifferenceMask);
247+
IntegrationTest.SaveAsPng(maskImage, fileStreamDifferenceMask);
247248
}
248249

249250
using var differenceMaskPic = SKBitmap.Decode(differenceMaskPicPath);
@@ -318,9 +319,10 @@ public void DiffMaskStreams(string pathPic1, string pathPic2, int expectedMeanEr
318319
Assert.That(maskedDiff.PixelErrorPercentage, Is.EqualTo(expectedPixelErrorPercentage), "PixelErrorPercentage");
319320
}
320321

321-
[TestCase(png0Rgba32, png1Rgba32, 0)]
322-
[TestCase(colorShift1, colorShift2, 20)]
323-
public void CalcDiffMaskImage_WhenSupplyingDiffMaskOfTwoImagesByFilePath_NoDifferences(string image1RelativePath, string image2RelativePath, int pixelColorShiftTolerance)
322+
[TestCase(png0Rgba32, png1Rgba32, 0, true)]
323+
[TestCase(colorShift1, colorShift2, 20, false)]
324+
[TestCase(colorShift1, colorShift2, 0, true)]
325+
public void CalcDiffMaskImage_WhenSupplyingDiffMaskOfTwoImagesByFilePath_NoDifferences(string image1RelativePath, string image2RelativePath, int pixelColorShiftTolerance, bool expectIsImageEntirelyBlack)
324326
{
325327
var image1Path = Path.Combine(AppContext.BaseDirectory, image1RelativePath);
326328
var image2Path = Path.Combine(AppContext.BaseDirectory, image2RelativePath);
@@ -339,7 +341,7 @@ public void CalcDiffMaskImage_WhenSupplyingDiffMaskOfTwoImagesByFilePath_NoDiffe
339341
ImageExtensions.SaveAsPng(diffMask2Image, diffMask2Stream);
340342
}
341343

342-
Assert.That(IsImageEntirelyBlack(diffMask2Image), Is.True);
344+
Assert.That(IsImageEntirelyBlack(diffMask2Image), Is.EqualTo(expectIsImageEntirelyBlack));
343345

344346
File.Delete(diffMask1Path);
345347
}
@@ -373,22 +375,42 @@ public void CalcDiffMaskImage_WhenSupplyingDiffMaskOfTwoImagesByStream_NoDiffere
373375
File.Delete(diffMask1Path);
374376
}
375377

376-
[TestCase(png0Rgba32, png1Rgba32)]
377-
public void CalcDiffMaskImage_WhenSupplyingDiffMaskOfTwoImagesByImage_NoDifferences(string image1RelativePath, string image2RelativePath)
378+
[TestCase(png0Rgba32, png1Rgba32, png1Rgba32, 0, false)]
379+
[TestCase(colorShift1, colorShift1, colorShift2, 15, true)]
380+
public void CalcDiffMaskImage_WhenSupplyingDiffMaskOfTwoImagesByImage_NoDifferences(string image1RelativePath, string image2RelativePath, string image3RelativePath, int expectedPixelColorShiftTolerance, bool expectToleranceMaskToEntirelyBlack)
378381
{
379382
var image1Path = Path.Combine(AppContext.BaseDirectory, image1RelativePath);
380383
var image2Path = Path.Combine(AppContext.BaseDirectory, image2RelativePath);
384+
var image3Path = Path.Combine(AppContext.BaseDirectory, image3RelativePath);
381385

382386
using var image1 = SKBitmap.Decode(image1Path);
383387
using var image2 = SKBitmap.Decode(image2Path);
388+
using var image3 = SKBitmap.Decode(image3Path);
384389

385390
using var diffMask1Image = Compare.CalcDiffMaskImage(image1, image2);
386391

387-
using var diffMask2Image = Compare.CalcDiffMaskImage(image1, image2, diffMask1Image);
392+
using var diffMask2Image = Compare.CalcDiffMaskImage(image1, image3, diffMask1Image, pixelColorShiftTolerance: expectedPixelColorShiftTolerance);
388393

394+
Assert.That(IsImageEntirelyBlack(diffMask1Image), Is.EqualTo(expectToleranceMaskToEntirelyBlack));
389395
Assert.That(IsImageEntirelyBlack(diffMask2Image), Is.True);
390396
}
391397

398+
[TestCase(png0Rgba32, png0Rgba32, 0)]
399+
[TestCase(png0Rgba32, png0Rgba32, 15)]
400+
[TestCase(colorShift1, colorShift2, 15)]
401+
public void CalcDiffMaskImage_ToleranceColorShift_NoDifferences(string image1RelativePath, string image2RelativePath, int expectedPixelColorShiftTolerance)
402+
{
403+
var image1Path = Path.Combine(AppContext.BaseDirectory, image1RelativePath);
404+
var image2Path = Path.Combine(AppContext.BaseDirectory, image2RelativePath);
405+
406+
using var image1 = SKBitmap.Decode(image1Path);
407+
using var image2 = SKBitmap.Decode(image2Path);
408+
409+
using var diffMask1Image = Compare.CalcDiffMaskImage(image1, image2, pixelColorShiftTolerance: expectedPixelColorShiftTolerance);
410+
411+
Assert.That(IsImageEntirelyBlack(diffMask1Image), Is.True);
412+
}
413+
392414
[Test]
393415
[TestCase(jpg0Rgb24, jpg1Rgb24)]
394416
[TestCase(png0Rgba32, png1Rgba32)]

SkiaSharpCompareTestNunit/SkiaSharpCompareTestNunit.csproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net8.0</TargetFrameworks>
4+
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
55
<IsPackable>false</IsPackable>
66
<Nullable>enable</Nullable>
77
<EnableNETAnalyzers>true</EnableNETAnalyzers>
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="coverlet.collector" Version="6.0.0">
11+
<PackageReference Include="coverlet.collector" Version="6.0.4">
1212
<PrivateAssets>all</PrivateAssets>
1313
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1414
</PackageReference>
15-
<PackageReference Include="nunit" Version="4.0.1" />
16-
<PackageReference Include="SonarAnalyzer.CSharp" Version="9.18.0.83559">
15+
<PackageReference Include="nunit" Version="4.3.2" />
16+
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.8.0.113526">
1717
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1818
<PrivateAssets>all</PrivateAssets>
1919
</PackageReference>
20-
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0">
20+
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0">
2121
<PrivateAssets>all</PrivateAssets>
2222
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2323
</PackageReference>
24-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
24+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
2525
</ItemGroup>
2626

2727
<ItemGroup>

0 commit comments

Comments
 (0)