Exemplo n.º 1
0
        private bool IsCharacterMatchAtPoint(int x, int y,
            NeighborDifference[,] searchDifferences, CharacterData characterData,
            float tolerance)
        {
            if (x + characterData.Difference.GetLength(1) >= searchDifferences.GetLength(1)
                || y + characterData.Difference.GetLength(0) >= searchDifferences.GetLength(0))
                return false;

            if (x == 31 && y == 140)
            {

            }

            for (int charY = 0; charY < characterData.Difference.GetLength(0); charY++)
            {
                for (int charX = 0; charX < characterData.Difference.GetLength(1); charX++)
                {
                    if (x + charX == 279 && y + charY == 192)
                    {

                    }

                    NeighborDifference characterDifference = characterData.Difference[charY, charX];
                    NeighborDifference searchDifference = searchDifferences[y + charY, x + charX];
                    if ((characterDifference.HasUp
                         && Math.Abs(characterDifference.Up - searchDifference.Up)
                         > tolerance)
                        || (characterDifference.HasDown
                         && Math.Abs(characterDifference.Down - searchDifference.Down)
                         > tolerance)
                        || (characterDifference.HasLeft
                         && Math.Abs(characterDifference.Left - searchDifference.Left)
                         > tolerance)
                        || (characterDifference.HasRight
                         && Math.Abs(characterDifference.Right - searchDifference.Right)
                         > tolerance))
                    {
                        return false;
                    }

                    if (characterDifference.IsPartOfChar
                        &&((!characterDifference.HasUp
                         && Math.Abs(searchDifference.Up) < 0.05)
                        || (!characterDifference.HasDown
                         && Math.Abs(searchDifference.Down) < 0.05)
                        || (!characterDifference.HasLeft
                         && Math.Abs(searchDifference.Left) < 0.05)
                        || (!characterDifference.HasRight
                         && Math.Abs(searchDifference.Right) < 0.05)))
                    {
                        return false;
                    }
                }
            }
            return true;
        }
Exemplo n.º 2
0
 public IEnumerable<FoundTextData> FindCharacterData(CharacterData characterData, float tolerance = 0.05f)
 {
     for (int y = 0; y < neighborDifferences.GetLength(0); y++)
     {
         for (int x = 0; x < neighborDifferences.GetLength(1); x++)
         {
             if (IsCharacterMatchAtPoint(x, y, neighborDifferences, characterData, tolerance))
             {
                 yield return
                     new FoundTextData
                     {
                         Bounds = new Rectangle(x, y, characterData.Width, characterData.Height),
                         Text = characterData.Letter.ToString()
                     };
             }
         }
     }
 }