Skip to content

Commit 5f3e5b5

Browse files
committed
再次优化提升性能
1 parent a28f0ef commit 5f3e5b5

1 file changed

Lines changed: 20 additions & 22 deletions

File tree

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

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Text;
1111
using System.Threading.Tasks;
1212
using DotNetCampus.MediaConverters.Imaging.Effect.Extensions;
13+
using SixLabors.ImageSharp.Advanced;
1314
using SixLabors.ImageSharp.Processing;
1415

1516
namespace DotNetCampus.MediaConverters.Imaging.Effect;
@@ -39,36 +40,33 @@ public static void ReplaceColor(this Image<Rgba32> bitmap, ColorMetadata sourceC
3940
/// <param name="targetColor">目标颜色</param>
4041
public static void ReplaceColor(this Image<Rgba32> image, Rgba32 sourceColor, Rgba32 targetColor)
4142
{
42-
var sourceVector4 = sourceColor.ToVector4();
43-
var targetVector4 = targetColor.ToVector4();
44-
4543
var sourceMetadata = new ColorMetadata(sourceColor);
4644

47-
image.Mutate(context =>
45+
Parallel.For(0, image.Height, rowIndex =>
4846
{
49-
context.ProcessPixelRowsAsVector4((Span<Vector4> row) =>
47+
Memory<Rgba32> rowMemory = image.DangerousGetPixelRowMemory(rowIndex);
48+
49+
var span = rowMemory.Span;
50+
51+
for (int colIndex = 0; colIndex < span.Length; colIndex++)
5052
{
51-
for (int i = 0; i < row.Length; i++)
53+
//获取颜色
54+
Rgba32 pixel = span[colIndex];
55+
// 快速分支
56+
if (pixel.Equals(sourceColor))
5257
{
53-
var current = row[i];
54-
if (current.Equals(sourceVector4))
55-
{
56-
// 快速分支
57-
row[i] = targetVector4;
58-
}
59-
else
58+
span[colIndex] = targetColor;
59+
}
60+
else
61+
{
62+
var color = new ColorMetadata(pixel);
63+
//处理颜色
64+
if (color.IsNearlyEquals(sourceMetadata))
6065
{
61-
Rgba32 pixel = default;
62-
pixel.FromVector4(current);
63-
64-
var currentMetadata = new ColorMetadata(pixel);
65-
if (currentMetadata.IsNearlyEquals(sourceMetadata))
66-
{
67-
row[i] = targetVector4;
68-
}
66+
span[colIndex] = targetColor;
6967
}
7068
}
71-
});
69+
}
7270
});
7371
}
7472

0 commit comments

Comments
 (0)