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]); }
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(); } }