示例#1
0
        private static LockBitmap ProcessScreenshot(string alphaPath, string colorPath)
        {
            LockBitmap AlphaScreenshot = new LockBitmap((Bitmap)Image.FromFile(alphaPath));
            LockBitmap ColorScreenshot = new LockBitmap((Bitmap)Image.FromFile(colorPath));

            AlphaScreenshot.LockBits();
            ColorScreenshot.LockBits();

            List <Coordinate> MarkerCoordinates = Service.GetMarkerCoordinates(AlphaScreenshot);

            for (int y = MarkerCoordinates[0].Y; y < (MarkerCoordinates[1].Y + 3); y++)
            {
                for (int x = MarkerCoordinates[0].X; x < (MarkerCoordinates[1].X + 3); x++)
                {
                    Color AlphaColor = AlphaScreenshot.GetPixel(x, y);
                    Color MainColor  = ColorScreenshot.GetPixel(x, y);

                    byte Alpha = (AlphaColor.G - 2 > AlphaColor.R && AlphaColor.G - 2 > AlphaColor.B) ? (byte)(255 - AlphaColor.G) : (byte)255;
                    ColorScreenshot.SetPixel(x, y, Color.FromArgb(
                                                 CalculateAlpha(MainColor.R, Alpha),
                                                 CalculateAlpha(MainColor.G, Alpha),
                                                 CalculateAlpha(MainColor.B, Alpha)
                                                 ));
                }
            }

            AlphaScreenshot.UnlockBits();
            ColorScreenshot.UnlockBits();

            return(ColorScreenshot);
        }
示例#2
0
        public List <Coordinate> GetMarkerCoordinates(LockBitmap Bitmap)
        {
            List <Coordinate> MarkerCoordinates = new List <Coordinate>();

            for (int y = 0; y < Bitmap.Height; y++)
            {
                for (int x = 0; x < Bitmap.Width; x++)
                {
                    Color color = Bitmap.GetPixel(x, y);
                    if (color == Color.FromArgb(0, 0, 255))
                    {
                        bool IsMarker = true;
                        for (int w = 0; w < 3; w++)
                        {
                            for (int v = 0; v < 3; v++)
                            {
                                IsMarker = IsMarker && (Bitmap.GetPixel(x + w, y + v) == ((w + v) % 2 == 0 ? Color.FromArgb(0, 0, 255) : Color.FromArgb(255, 0, 0)));
                            }
                        }
                        if (IsMarker)
                        {
                            MarkerCoordinates.Add(new Coordinate {
                                X = x, Y = y
                            });
                            x = x + 3;
                            y = y + 3;
                            Console.WriteLine(x + ", " + y);
                        }
                    }
                }
            }

            /*
             *  if (MarkerCoordinates.Count == 2)
             *  {
             *      Bitmap.UnlockBits();
             *      Bitmap.Source = Crop(
             *          Bitmap.Source,
             *          new Rectangle(
             *              MarkerCoordinates[0].X,
             *              MarkerCoordinates[0].Y,
             *              (MarkerCoordinates[1].X - MarkerCoordinates[0].X) + 3,
             *              (MarkerCoordinates[1].Y - MarkerCoordinates[0].Y) + 3
             *          )
             *      );
             *
             *      Bitmap.LockBits();
             *  }
             */

            return(MarkerCoordinates);
        }