public ColorExpression(int pixelIndex, Color targetColor, AcceptedColor status, int priority, int tolerance, EvaluationStrategy strategy) { TargetColor = targetColor; PixelIndex = pixelIndex; Status = status; Priority = priority; Tolerance = tolerance; Strategy = strategy; }
private void EvaluateColorExpressions(Screenshot screenshot) { var highestHealthLevel = _userProcess.Expression .OrderBy(p => p.Priority) .First() .Status; _userProcess.Expression .OrderBy(p => p.Priority) .ToList() .ForEach(e => { var pixel = screenshot.Bitmap.GetPixel(e.PixelIndex, 0); var expectedLab = ColorHelper.CreateLabFromRgb(e.TargetColor.R, e.TargetColor.G, e.TargetColor.B); var currentLab = ColorHelper.CreateLabFromRgb(pixel.R, pixel.G, pixel.B); var diference = CompareLabColors(expectedLab, currentLab); if (diference > -e.Tolerance && diference < e.Tolerance) { if (e.Strategy == EvaluationStrategy.KeepLast) { highestHealthLevel = _lastHealthLevel; } else { highestHealthLevel = e.Status; } } #region Debug //screenshot.Bitmap.MarkPixel(e.PixelIndex, 0, e.Status); #endregion }); _lastHealthLevel = highestHealthLevel; _userLoggingService.LogLine($"Health: {highestHealthLevel}"); _communicationService.ChangeColorAsync(highestHealthLevel); }
public static void MarkPixel(this System.Drawing.Bitmap bitmap, int x, int y, AcceptedColor color) { var knownColor = Color.Transparent; switch (color) { case AcceptedColor.Red: knownColor = Color.LimeGreen; break; case AcceptedColor.Green: knownColor = Color.Yellow; break; case AcceptedColor.Blue: knownColor = Color.Red; break; case AcceptedColor.Yellow: knownColor = Color.Yellow; break; case AcceptedColor.Magenta: knownColor = Color.Purple; break; case AcceptedColor.LightBlue: knownColor = Color.Aqua; break; } //left try { bitmap.SetPixel(x - 2, y, knownColor); } catch { } try { bitmap.SetPixel(x - 1, y, knownColor); } catch { } //top try { bitmap.SetPixel(x, y + 2, knownColor); } catch { } try { bitmap.SetPixel(x, y + 1, knownColor); } catch { } //right try { bitmap.SetPixel(x + 2, y, knownColor); } catch { } try { bitmap.SetPixel(x + 1, y, knownColor); } catch { } //bottom try { bitmap.SetPixel(x, y - 2, knownColor); } catch { } try { bitmap.SetPixel(x, y - 1, knownColor); } catch { } }