public Pattern FindMatch(List <Pattern> patterns, byte[] screen)
        {
            List <Pattern> matches = new List <Pattern>();

            foreach (var pattern in patterns)
            {
                bool matchDetected = this.MatchPatternInPicture(BitmapByteConverter.ConvertByteArrayToBitmap(screen),
                                                                BitmapByteConverter.ConvertByteArrayToBitmap(pattern.ImageBytes), TemplateMatchingType.CcoeffNormed);
                if (matchDetected)
                {
                    matches.Add(pattern);
                }
            }

            if (1 == matches.Count)
            {
                return(matches[0]);
            }
            else if (1 < matches.Count)
            {
                //perform another check with different matching type
                foreach (var pattern in matches)
                {
                    bool matchDetected = this.MatchPatternInPicture(
                        BitmapByteConverter.ConvertByteArrayToBitmap(screen),
                        BitmapByteConverter.ConvertByteArrayToBitmap(pattern.ImageBytes),
                        TemplateMatchingType.CcorrNormed);
                    if (!matchDetected)
                    {
                        matches.Remove(pattern);
                    }
                }
            }
            else
            {
                return(null);
            }

            //If there is still more than one match get first one
            return(matches[0]);
        }
Exemplo n.º 2
0
        public async Task AnalyzeScreenAsync(Bitmap screenImage)
        {
            if (null == _dataBase || null == _patternMatcher)
            {
                throw new ArgumentNullException();
            }

            if (null != screenImage)
            {
#if (UNIT_TEST)
                var patterns = _dataBase.GetPatterns();
#else
                var patterns = await _dataBase.GetPatternsAsync();
#endif

                var match = _patternMatcher.FindMatch(patterns, BitmapByteConverter.ConvertBitmapToByteArray(screenImage));

                if (null == match)
                {
                    _dataBase.UploadScreen(BitmapByteConverter.ConvertBitmapToByteArray(screenImage));
                }
                else
                {
                    //Update UserActivity with just fetched data
                    var userActivity = _dataBase.GetUserActivity();

                    userActivity[match.Name] = true;

                    _dataBase.UpdateUserActivity(userActivity);
                }
            }
            else
            {
                throw new ArgumentNullException();
            }
        }