BoringHeroes.ScreenReader.UpdateHeroes C# (CSharp) Метод

UpdateHeroes() публичный статический Метод

public static UpdateHeroes ( CurrentGameState state ) : void
state BoringHeroes.GameLogic.CurrentGameState
Результат void
        public static void UpdateHeroes(CurrentGameState state)
        {
            TickNow();
            heroPoints[0].Clear();
            heroPoints[1].Clear();
            heroPoints[2].Clear();
            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            var src = GrabScreenGDI(new Rectangle(0, 78, 1024, 550));
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);

            var grayScale = Grayscale.CommonAlgorithms.BT709.Apply(sourceImage);
            Tools.Thresholder.ThresholdValue = 128;
            Tools.Thresholder.ApplyInPlace(grayScale);

            var thresholded = Tools.GSToRgb.Apply(grayScale);

            var bc = new BlobCounter();
            bc.ProcessImage(thresholded);
            var blobs = bc.GetObjectsInformation().ToList();
            try
            {
                blobs =
                    blobs.Where(
                        o =>
                            o.Rectangle.Width > 80 && o.Rectangle.Width < 90 && o.Rectangle.Height < 20 &&
                            o.Rectangle.Height > 10).ToList();
                var i = 0;
                Bitmap bitmap = null;
                foreach (var blob in blobs)
                {
                    Tools.Cropper.Rectangle = new Rectangle(blob.Rectangle.X + 1,
                        blob.Rectangle.Y + 3,
                        blob.Rectangle.Width - 1,
                        4
                        );
                    var cropped = Tools.Cropper.Apply(src);
                    var imstat = new ImageStatistics(cropped);
                    //Console.WriteLine("R {0} G {1}", imstat.RedWithoutBlack.Median, imstat.GreenWithoutBlack.Median);
                    if (Math.Abs(imstat.RedWithoutBlack.Median - imstat.GreenWithoutBlack.Median) < 4)
                    {
                        state.Me.HeroScreenPosition = new System.Drawing.Point((int) blob.CenterOfGravity.X,
                            (int) blob.CenterOfGravity.Y + 150);
                        //state.Me.HeroHP = (float) (matches1.Length/120.0*100.0);
                        heroPoints[0].Add(
                            new OnScreenHero(
                                new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                    (int) blob.CenterOfGravity.Y + 150),
                                0));
                    }
                    else if (imstat.RedWithoutBlack.Median > imstat.GreenWithoutBlack.Median)
                    {
                        heroPoints[1].Add(
                            new OnScreenHero(
                                new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                    (int) blob.CenterOfGravity.Y + 150),
                                0));
                    }
                    else
                    {
                        heroPoints[2].Add(
                            new OnScreenHero(
                                new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                    (int) blob.CenterOfGravity.Y + 150),
                                0));
                    }
                }
                state.FriendlyHeroes = heroPoints[2].ToArray();
                state.EnemyHeroes = heroPoints[1].ToArray();
            }
            catch (Exception e)
            {
            }

            MainWindow.DebugReaderStats("Heroes:" + TickNow());
            //DebugPlotVectorOnMap(state, null);
        }