Beispiel #1
0
 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;
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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 { }
        }