Skip to content

Commit aa9fed4

Browse files
committed
优化替换的逻辑
1 parent 3660396 commit aa9fed4

2 files changed

Lines changed: 25 additions & 3 deletions

File tree

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,27 @@ public static void ReplaceColor(this Image<Rgba32> image, Rgba32 sourceColor, Rg
6767
});
6868
}
6969

70+
/// <summary>
71+
/// 将图片<paramref name="bitmap"/>上指定的一部分颜色替换为指定的对应颜色
72+
/// </summary>
73+
/// <param name="bitmap">图片</param>
74+
/// <param name="colorInfos">存储替换信息的颜色组</param>
75+
public static void ReplaceColor(this Image<Rgba32> bitmap, IReadOnlyList<(ColorMetadata SourceColor, ColorMetadata TargetColor)> colorInfos)
76+
{
77+
bitmap.PerPixelProcess(color =>
78+
{
79+
foreach (var colorInfo in colorInfos)
80+
{
81+
if (color.IsNearlyEquals(colorInfo.SourceColor))
82+
{
83+
return colorInfo.TargetColor;
84+
}
85+
}
86+
87+
return color;
88+
});
89+
}
90+
7091
/// <summary>
7192
/// 将图片<paramref name="bitmap"/>上指定的一部分颜色替换为指定的对应颜色
7293
/// </summary>

src/MediaConverters/MediaConverters.Tool/Contexts/ReplaceColorTask.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using DotNetCampus.MediaConverters.Imaging.Effects;
22
using DotNetCampus.MediaConverters.Imaging.Effects.Colors;
33
using DotNetCampus.MediaConverters.Utils;
4+
45
using SixLabors.ImageSharp;
56
using SixLabors.ImageSharp.PixelFormats;
67

@@ -12,18 +13,18 @@ public class ReplaceColorTask : IImageConvertTask
1213

1314
public void Run(Image<Rgba32> image)
1415
{
15-
if (ReplaceColorInfoList is null || ReplaceColorInfoList.Count ==0)
16+
if (ReplaceColorInfoList is null || ReplaceColorInfoList.Count == 0)
1617
{
1718
return;
1819
}
1920

20-
var dictionary = new Dictionary<ColorMetadata, ColorMetadata>(ReplaceColorInfoList.Count);
21+
var dictionary = new List<(ColorMetadata SourceColor, ColorMetadata TargetColor)>(ReplaceColorInfoList.Count);
2122
foreach (var replaceColorInfo in ReplaceColorInfoList)
2223
{
2324
var (oldColor, newColor) = replaceColorInfo.ToRgba32Pair();
2425
var oldMetadata = new ColorMetadata(oldColor);
2526
var newMetadata = new ColorMetadata(newColor);
26-
dictionary[oldMetadata] = newMetadata;
27+
dictionary.Add((oldMetadata, newMetadata));
2728
}
2829

2930
image.ReplaceColor(dictionary);

0 commit comments

Comments
 (0)