1
1
using DotNetCampus . MediaConverters . Imaging . Effect . Color ;
2
2
3
+ using SixLabors . ImageSharp ;
4
+ using SixLabors . ImageSharp . PixelFormats ;
5
+ using SixLabors . ImageSharp . Processing ;
6
+
3
7
using System ;
4
8
using System . Collections . Generic ;
9
+ using System . Diagnostics ;
5
10
using System . Linq ;
11
+ using System . Numerics ;
6
12
using System . Runtime . InteropServices ;
7
13
using System . Text ;
8
14
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 ;
11
17
12
18
namespace DotNetCampus . MediaConverters . Imaging . Effect . Extensions ;
13
19
@@ -22,24 +28,27 @@ internal static class BitmapExtension
22
28
/// 将<see cref="Image{Rgba32}"/>逐像素处理
23
29
/// </summary>
24
30
/// <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 )
26
32
{
27
- bitmap . ProcessPixelRows ( accessor =>
33
+ //var stopwatch = new Stopwatch();
34
+ //stopwatch.Start();
35
+ Parallel . For ( 0 , image . Height , rowIndex =>
28
36
{
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 ++ )
30
42
{
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 ;
41
49
}
42
50
} ) ;
51
+ //stopwatch.Stop();
43
52
44
53
//var pixelFormat = bitmap.PixelFormat;
45
54
0 commit comments