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