NodePipeline/NodePipeline.Application/ImageProcessing/Convolution.cs
2026-01-02 20:55:25 +03:00

26 lines
751 B
C#

namespace NodePipeline.Application.ImageProcessing;
public static class Convolution
{
public static void Apply(ImageBuffer src, ImageBuffer dst, float[] kernel)
{
var w = src.Width;
var h = src.Height;
var radius = kernel.Length / 2;
for (var y = 0; y < h; y++)
for (var x = 0; x < w; x++)
for (var c = 0; c < 3; c++)
{
float acc = 0;
for (var k = -radius; k <= radius; k++)
{
var px = Math.Clamp(x + k, 0, w - 1);
var idx = (y * w + px) * 3 + c;
acc += src.Pixels[idx] * kernel[k + radius];
}
dst.Pixels[(y * w + x) * 3 + c] = (byte)Math.Clamp(acc, 0, 255);
}
}
}