разные значения цвета для каждого монитора с getpixel / lockbits - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь создать метод, который возвращает значение цвета указанного 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, но та же проблема сохраняется.

...