예제 #1
0
        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);
        }
예제 #2
0
        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);
        }