Skip to content

Commit 1a2aaad

Browse files
committed
尝试复杂并行化处理
1 parent 46ebb4b commit 1a2aaad

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

src/MediaConverters/MediaConverters.Lib/Imaging/Effect/Extensions/BitmapExtension.cs

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
using DotNetCampus.MediaConverters.Imaging.Effect.Color;
22

3+
using SixLabors.ImageSharp;
4+
using SixLabors.ImageSharp.PixelFormats;
5+
using SixLabors.ImageSharp.Processing;
6+
37
using System;
48
using System.Collections.Generic;
9+
using System.Diagnostics;
510
using System.Linq;
11+
using System.Numerics;
612
using System.Runtime.InteropServices;
713
using System.Text;
814
using System.Threading.Tasks;
9-
using SixLabors.ImageSharp;
10-
using SixLabors.ImageSharp.PixelFormats;
15+
using SixLabors.ImageSharp.Advanced;
16+
using static System.Net.Mime.MediaTypeNames;
1117

1218
namespace DotNetCampus.MediaConverters.Imaging.Effect.Extensions;
1319

@@ -22,24 +28,27 @@ internal static class BitmapExtension
2228
/// 将<see cref="Image{Rgba32}"/>逐像素处理
2329
/// </summary>
2430
/// <returns></returns>
25-
public static void PerPixelProcess(this Image<Rgba32> bitmap, Func<ColorMetadata, ColorMetadata> func)
31+
public static void PerPixelProcess(this Image<Rgba32> image, Func<ColorMetadata, ColorMetadata> func)
2632
{
27-
bitmap.ProcessPixelRows(accessor =>
33+
//var stopwatch = new Stopwatch();
34+
//stopwatch.Start();
35+
Parallel.For(0, image.Height, rowIndex =>
2836
{
29-
for (int rowIndex = 0; rowIndex < accessor.Height; rowIndex++)
37+
Memory<Rgba32> rowMemory = image.DangerousGetPixelRowMemory(rowIndex);
38+
39+
var span = rowMemory.Span;
40+
41+
for (int colIndex = 0; colIndex < span.Length; colIndex++)
3042
{
31-
var span = accessor.GetRowSpan(rowIndex);
32-
for (int colIndex = 0; colIndex < span.Length; colIndex++)
33-
{
34-
//获取颜色
35-
var color = new ColorMetadata(span[colIndex]);
36-
//处理颜色
37-
var targetColor = func(color);
38-
//保存颜色
39-
span[colIndex] = targetColor.Color;
40-
}
43+
//获取颜色
44+
var color = new ColorMetadata(span[colIndex]);
45+
//处理颜色
46+
var targetColor = func(color);
47+
//保存颜色
48+
span[colIndex] = targetColor.Color;
4149
}
4250
});
51+
//stopwatch.Stop();
4352

4453
//var pixelFormat = bitmap.PixelFormat;
4554

0 commit comments

Comments
 (0)