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); }
public void SaveLayer(PhotonLayer photonLayer) { this.packedLayerImage = photonLayer.PackLayerImage(); this.imageData = photonLayer.PackImageData(); this.dataSize = imageData.Length; islandRows = new List <BitArray>(); isLandsCount = photonLayer.SetIslands(islandRows); }
public void UpdateLayerIslands(PhotonLayer photonLayer) { islandRows = new List <BitArray>(); isLandsCount = photonLayer.SetIslands(islandRows); }