private void FillBitmapPad(int x, int y, EditMonomap monomap, BitmapPad pad) { var recursionStack = new Stack <LightPoint>(); recursionStack.Push(new LightPoint(x, y)); do { var currentPoint = recursionStack.Pop(); x = currentPoint.X; y = currentPoint.Y; for (int i = 0; i < _nearbyCells.Length; i++) { var nearbyCell = _nearbyCells[i]; int nextX = x + nearbyCell.X; int nextY = y + nearbyCell.Y; if (IsBlackCheckNearbyCell(nextX, nextY, monomap, pad)) { recursionStack.Push(new LightPoint(nextX, nextY)); } } } while (recursionStack.Any()); }
public void SimpleCreationTest() { EditMonomap monomap = new EditMonomap(_sourceImage); Assert.AreEqual(monomap.Width, _sourceImage.GetLength(0)); Assert.AreEqual(monomap.Height, _sourceImage.GetLength(1)); }
/// <summary> /// Распарсить изображение на более меньшие. /// </summary> /// <param name="sourceImage">Исходное распознаваемое изображение.</param> /// <returns>Список найденных фрагментов.</returns> public IList <QSymbol> GetFragments(IMonomap sourceImage) { var result = new List <QSymbol>(); var editMonomap = new EditMonomap(sourceImage); for (int y = 0; y < editMonomap.Height; y++) { for (int x = 0; x < editMonomap.Width; x++) { if (editMonomap[x, y]) { // Заполняем первую точку, что бы внутри метода проверку не делать для заполнения. BitmapPad pad = new BitmapPad(); pad.SetPoint(x, y); // Начинаем рекурсивное создание фигуры FillBitmapPad(x, y, editMonomap, pad); var symbol = new QSymbol(pad, pad.TopLeftPoint, EulerCharacteristicComputer.Compute2D(pad)); result.Add(symbol); } } } return(result); }
public void AreEqualTest() { EditMonomap monomap = new EditMonomap(_sourceImage); Assert.AreEqual(monomap[0, 0], true); Assert.AreEqual(monomap[0, 1], true); Assert.AreEqual(monomap[1, 0], true); Assert.AreEqual(monomap[1, 1], true); }
public void OutOfBoundsTest() { EditMonomap monomap = new EditMonomap(_sourceImage); Assert.AreEqual(monomap[-1, -1], false); Assert.AreEqual(monomap[-1, 0], false); Assert.AreEqual(monomap[0, -1], false); Assert.AreEqual(monomap[2, 2], false); Assert.AreEqual(monomap[1, 2], false); Assert.AreEqual(monomap[2, 1], false); }