Я пытаюсь создать метод, который возвращает значение цвета указанного c пикселя. У меня проблема в том, что один и тот же фрагмент кода возвращает разные ARGB на разных мониторах.
В настоящее время я использую этот метод:
public static Color GetColorFromPosition(string process, int x, int y)
{
//using bitmap object to do actions
using (Bitmap Capture = CaptureApplication(Path.GetFileNameWithoutExtension(process)))
{
//copy specific part of screen and push it into bmp
Color result = Capture.Clone(new Rectangle(x, y, 1, 1), Capture.PixelFormat).GetPixel(0,0);
return result;
}
}
Метод захвата приложения выглядит следующим образом (метод принимает снимок открытого приложения):
public static Bitmap CaptureApplication(string procName)
{
Rectangle clientArea = GetProcessWindowRect(procName);
Bitmap bp = new Bitmap(clientArea.Width, clientArea.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bp);
g.CopyFromScreen(clientArea.Left, clientArea.Top, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
return bp;
}
Это захватывает окно приложения, которое открывается, а затем получает значение ARGB для данного пикселя, используя getpixel. Так, чтобы привести пример, я хочу, чтобы цвет при х = 100 и у = 100. На одном компьютере он вернет [A = 255, R = 6, G = 158, B = 12], а на другом компьютере я получу [A = 255, R = 6, G = 157, B = 13]. Результаты немного отличаются.
Мой вопрос: почему это происходит, и есть ли решение? Я также пытался использовать lockbits вместо getpixel, но та же проблема сохраняется.