Skip to content

Commit 83da922

Browse files
committed
加上更多单元测试
1 parent cc3bdfe commit 83da922

File tree

7 files changed

+97
-9
lines changed

7 files changed

+97
-9
lines changed

src/MediaConverters/MediaConverters.Lib/Imaging/Effect/BitmapEffectExtension.cs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using System.Threading.Tasks;
78
using DotNetCampus.MediaConverters.Imaging.Effect.Colors;
89
using DotNetCampus.MediaConverters.Imaging.Effect.Extensions;
@@ -178,4 +179,36 @@ public static void SetSoftEdgeEffect(this Image<Rgba32> bitmap, float radius)
178179

179180
SoftEdgeHelper.SetSoftEdgeMask(bitmap, radius);
180181
}
181-
}
182+
183+
/// <summary>
184+
/// 获取一张图中颜色数量最多的颜色
185+
/// </summary>
186+
/// <param name="image"></param>
187+
public static ColorCount GetMaxCountColor(this Image<Rgba32> image)
188+
{
189+
var dictionary = new Dictionary<Rgba32, int>();
190+
image.ProcessPixelRows(accessor =>
191+
{
192+
for (int row = 0; row < accessor.Height; row++)
193+
{
194+
var pixelRow = accessor.GetRowSpan(row);
195+
foreach (var pixel in pixelRow)
196+
{
197+
if (dictionary.TryGetValue(pixel, out int count))
198+
{
199+
dictionary[pixel] = count + 1;
200+
}
201+
else
202+
{
203+
dictionary[pixel] = 1;
204+
}
205+
}
206+
}
207+
});
208+
209+
var (color, count) = dictionary.MaxBy(pair => pair.Value);
210+
return new ColorCount(color, count);
211+
}
212+
}
213+
214+
public readonly record struct ColorCount(Rgba32 Color, int Count);
557 KB
Loading
627 KB
Loading

src/MediaConverters/MediaConverters.Tests/Framework/TestHelper.cs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using SixLabors.ImageSharp;
33
using SixLabors.ImageSharp.Formats.Png;
44
using SixLabors.ImageSharp.PixelFormats;
5+
using TextVisionComparer;
56

67
namespace DotNetCampus.MediaConverters.Tests;
78

@@ -16,31 +17,51 @@ public static void AssemblyInit(TestContext context)
1617

1718
private static DirectoryInfo WorkingDirectory { get; set; } = null!;
1819

19-
public static string SaveAsTestImageFile(this Image<Rgba32> image)
20+
public static FileInfo SaveAsTestImageFile(this Image<Rgba32> image)
2021
{
2122
var file = Path.Join(WorkingDirectory.FullName, Path.GetRandomFileName() + ".png");
2223
using var fileStream = File.OpenWrite(file);
2324
image.SaveAsPng(fileStream, new PngEncoder()
2425
{
2526
ColorType = PngColorType.RgbWithAlpha
2627
});
27-
return file;
28+
return new FileInfo(file);
2829
}
2930

30-
public static void OpenFileInExplorer(string filePath)
31+
public static FileInfo SaveAndCompareTestFile(this Image<Rgba32> image, string? testFileName = null)
3132
{
32-
if (File.Exists(filePath))
33+
FileInfo testFile = image.SaveAsTestImageFile();
34+
35+
if (testFileName != null)
36+
{
37+
var file = TestFileProvider.GetTestFile(testFileName);
38+
CompareImageFile(testFile, file);
39+
}
40+
41+
return testFile;
42+
}
43+
44+
public static void CompareImageFile(FileInfo file1, FileInfo file2)
45+
{
46+
var visionComparer = new VisionComparer();
47+
var visionCompareResult = visionComparer.Compare(file1,file2);
48+
Assert.IsTrue(visionCompareResult.IsSimilar());
49+
}
50+
51+
public static void OpenFileInExplorer(FileInfo file)
52+
{
53+
if (File.Exists(file.FullName))
3354
{
3455
#if DEBUG
3556
if (Debugger.IsAttached)
3657
{
37-
Process.Start(new ProcessStartInfo("explorer", $"\"{filePath}\"") { UseShellExecute = true });
58+
Process.Start(new ProcessStartInfo("explorer", $"\"{file.FullName}\"") { UseShellExecute = true });
3859
}
3960
#endif
4061
}
4162
else
4263
{
43-
throw new FileNotFoundException($"The file '{filePath}' does not exist.");
64+
throw new FileNotFoundException($"The file '{file}' does not exist.");
4465
}
4566
}
4667
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using DotNetCampus.MediaConverters.Imaging.Effect;
2+
3+
using SixLabors.ImageSharp;
4+
using SixLabors.ImageSharp.PixelFormats;
5+
6+
namespace DotNetCampus.MediaConverters.Tests.Imaging.Effect;
7+
8+
[TestClass()]
9+
public class BitmapEffectExtensionTests
10+
{
11+
[TestMethod()]
12+
public void TestGetMaxCountColor()
13+
{
14+
Image<Rgba32> image = TestFileProvider.GetDefaultTestImage();
15+
var (rgba32, count) = image.GetMaxCountColor();
16+
17+
var expected = new Rgba32(0xF1, 0xD7, 0xA6, 0xFF);
18+
Assert.AreEqual(expected, rgba32);
19+
Assert.AreEqual(1215, count);
20+
}
21+
22+
[TestMethod()]
23+
public void ReplaceColorTest1()
24+
{
25+
Image<Rgba32> image = TestFileProvider.GetDefaultTestImage();
26+
var (rgba32, count) = image.GetMaxCountColor();
27+
_ = count;
28+
var targetColor = new Rgba32(0xFF, 0xFF, 0xFF, 0x00);
29+
image.ReplaceColor(rgba32, targetColor);
30+
31+
var file = image.SaveAndCompareTestFile("ReplaceColorTest1.png");
32+
TestHelper.OpenFileInExplorer(file);
33+
}
34+
}

src/MediaConverters/MediaConverters.Tests/Imaging/Effect/SoftEdgeHelperTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ public void SetSoftEdgeMaskTest()
1818

1919
SoftEdgeHelper.SetSoftEdgeMask(image, 50.0f);
2020

21-
var file = image.SaveAsTestImageFile();
21+
var file = image.SaveAndCompareTestFile("SetSoftEdgeMaskResult1.png");
2222

23-
Assert.IsTrue(File.Exists(file));
2423
TestHelper.OpenFileInExplorer(file);
2524
}
2625

src/MediaConverters/MediaConverters.Tests/MediaConverters.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
<ItemGroup>
1818
<ProjectReference Include="..\MediaConverters.Lib\MediaConverters.Lib.csproj" />
19+
<ProjectReference Include="..\TextVisionComparer\TextVisionComparer.csproj" />
1920
</ItemGroup>
2021

2122
<ItemGroup>

0 commit comments

Comments
 (0)