📄 Colors/src/HistogramBuilder.cs
using System;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

namespace Mosaic.Colors;

internal class HistogramBuilder()
{
    public readonly Memory<int> Histogram = new int[MmcqQuantizer.HistogramSize];

    public void Populate(PixelAccessor<Rgba32> accessor)
    {
        var histogram = Histogram.Span;

        for (var y = 0; y < accessor.Height; y++)
        {
            var row = accessor.GetRowSpan(y);
            for (var x = 0; x < row.Length; x++)
            {
                var pixel = row[x];
                var r = pixel.R >> MmcqQuantizer.Shift;
                var g = pixel.G >> MmcqQuantizer.Shift;
                var b = pixel.B >> MmcqQuantizer.Shift;
                histogram[MmcqQuantizer.GetColorIndex(r, g, b)]++;
            }
        }
    }
}