private void Calculate(List <BitArray> unpackedImage, List <BitArray> previousUnpackedImage, PhotonLayer photonLayer) { islandRows = new List <BitArray>(); isLandsCount = 0; photonLayer.Clear(); for (int y = 0; y < unpackedImage.Count; y++) { BitArray currentRow = unpackedImage[y]; BitArray prevRow = previousUnpackedImage?[y]; if (currentRow != null) { int x = 0; while ((x = currentRow.NextSetBit(x)) >= 0) { if (prevRow == null || prevRow[x]) { photonLayer.Supported(x, y); } else { photonLayer.Island(x, y); } ++x; } } } photonLayer.Reduce(); isLandsCount = photonLayer.SetIslands(islandRows); }
private int Fixit(Action <string> reportProgress, PhotonLayer layer, PhotonFileLayer fileLayer, int loops) { int changed = layer.Fixlayer(); if (changed > 0) { layer.Reduce(); fileLayer.UpdateLayerIslands(layer); reportProgress?.Invoke(", " + changed + " pixels changed"); if (loops > 0) { changed += Fixit(reportProgress, layer, fileLayer, loops - 1); } } return(changed); }