//-------------------------------------------------------------------------------------- public void AddSetPoint(CSetPoint pOtherSet) { foreach (CPoint lPoint in pOtherSet) { Add(lPoint); } }
//-------------------------------------------------------------------------------------- /// <summary> /// разбить рисунок(в виде матрицы) на отдельные куски /// в виде списка матриц по методу множеств /// /// </summary> /// <param name="pMatrix"></param> /// <returns></returns> public List <byte[][]> SplitBySet(byte[][] pMatrix) { List <CSetPoint> lContainnigSets = new List <CSetPoint>(); fSets.Clear(); for (int i = 0; i < pMatrix.Length; i++) { for (int j = 0; j < pMatrix[i].Length; j++) { if (pMatrix[i][j] == 1) { lContainnigSets.Clear(); CPoint lCurrentPoint = new CPoint(i, j); foreach (CSetPoint setpoint in fSets) { if (setpoint.ContainNeighborhood(lCurrentPoint)) { lContainnigSets.Add(setpoint); } } if (lContainnigSets.Count > 0) { lContainnigSets[0].Add(lCurrentPoint); if (lContainnigSets.Count > 1) { for (int k = 1; k < lContainnigSets.Count; k++) { lContainnigSets[0].AddSetPoint(lContainnigSets[k]); } for (int k = 1; k < lContainnigSets.Count; k++) { fSets.Remove(lContainnigSets[k]); } } } else { CSetPoint lNewSet = new CSetPoint(); lNewSet.Add(lCurrentPoint); fSets.Add(lNewSet); } } } } return(null); }