quantize function

ColorMap? quantize(
  1. List<List<int>> pixels,
  2. int maxColors
)

Quantizes an image's colors using the Median Cut Algorithm.

Implementation

ColorMap? quantize(List<List<int>> pixels, int maxColors) {
  if (pixels.isEmpty || maxColors < 2) return null;

  var vbox = ColorVolumeBox.fromPixels(pixels);
  var pq = PriorityQueue<ColorVolumeBox>(
    (a, b) => b.pixelCount.compareTo(a.pixelCount),
  );
  pq.push(vbox);

  while (pq.length < maxColors && pq.length > 0) {
    var vbox = pq.pop();
    if (vbox.pixelCount == 0) continue;

    var (vbox1, vbox2) = vbox.split();
    pq.push(vbox1);
    if (vbox2 != null) pq.push(vbox2);
  }

  return ColorMap(pq._contents.map((vbox) => vbox.averageColor).toList());
}