private static IntPoint FindNearestY(int xStart, int xEnd, int yStart, int yIncrement, IScreenShot screenshot) { xStart = Math.Max(screenshot.Left, xStart); xEnd = Math.Min(screenshot.Right, xEnd); int xEdge = xStart; int yEdge = yIncrement < 0 ? int.MinValue : int.MaxValue; for (int x = xStart; x < xEnd; ++x) { int startPixel = screenshot.GetScreenPixel(x, yStart); for (int y = yStart; y >= screenshot.Top && y <= screenshot.Bottom; y += yIncrement) { if (!ScreenCoordinates.IsPixelClose(screenshot.GetScreenPixel(x, y), startPixel)) { if (yIncrement > 0 && yEdge > y) { xEdge = x; yEdge = y; } else if (yIncrement < 0 && yEdge < y) { xEdge = x; yEdge = y; } break; } startPixel = screenshot.GetScreenPixel(x, y); } } yEdge = yEdge.Clamp(screenshot.Top, screenshot.Bottom); return(new IntPoint(xEdge, yEdge)); }
private static IntPoint FindNearestX(int xStart, int yStart, int yEnd, int xIncrement, IScreenShot screenshot) { yStart = Math.Max(screenshot.Top, yStart); yEnd = Math.Min(screenshot.Bottom, yEnd); int xEdge = xIncrement < 0 ? int.MinValue : int.MaxValue; int yEdge = yStart; for (int y = yStart; y < yEnd; ++y) { int startPixel = screenshot.GetScreenPixel(xStart, y); for (int x = xStart; x >= screenshot.Left && x <= screenshot.Right; x += xIncrement) { if (!ScreenCoordinates.IsPixelClose(screenshot.GetScreenPixel(x, y), startPixel)) { if (xIncrement > 0 && xEdge > x) { xEdge = x; yEdge = y; } else if (xIncrement < 0 && xEdge < x) { xEdge = x; yEdge = y; } break; } startPixel = screenshot.GetScreenPixel(x, y); } } xEdge = xEdge.Clamp(screenshot.Left, screenshot.Right); return(new IntPoint(xEdge, yEdge)); }