【问题标题】:PyAutoGUI not returning correct rgb valuesPyAutoGUI 没有返回正确的 rgb 值
【发布时间】:2021-03-22 21:45:59
【问题描述】:

我正在使用带有 pyautogui==0.9.52 的 python 3.9,我正在尝试获取屏幕上某个像素的 rgb 值。结果类似于,如果我有一个红色像素的坐标,它会将 rgb 值返回为(30,30,30)

如果我使用displayMousePosition(),我首先必须运行sys.platform = '_'才能得到一个rgb值,即使那样它仍然是错误的rgb值。

如果我使用pyautogui.pixel(x,y),它也会返回错误的 rgb 值。它可能与不兼容的版本有关吗?有人知道如何解决这个问题吗?

【问题讨论】:

  • displayMousePosition 听起来像是返回位置,而不是像素值。该功能在哪里定义/记录?您获得的像素值与您期望的值相比是多少。
  • @Lburris12 你不是在找image = pyautogui.screenshot()x, y = pyautogui.position()rgb = image.getpixel((x, y))吗?
  • @RandomDavis 如果我使用 displayMousePosition() 它会在我移动鼠标时为我提供更新的输出。输出由鼠标的 x 和 y 坐标以及鼠标所在像素的 RGB 值组成。当我使用它时,假设我正在尝试获取橙色圆圈的值,我将鼠标悬停在橙色圆圈上,但 RGB 值返回类似于 (30, 30, 30) 的值。
  • @Guimute 我也试过这个,但这也会返回一个错误的 RGB 值。
  • 我可能需要知道的一件事是,当我打开 python shell 并导入 pyautogui 时,它会说:“用户警告:rubicon.objc.ctypes_patch 仅在 Python 3.4 到 3.8 中测试过。你是使用 Python 3.9.0。最有可能的事情会正常工作”。如果这是问题,有人知道我如何在 python 3.9 上正确使用它吗?

标签: python rgb pixel pyautogui


【解决方案1】:

我遇到了类似的问题。我不明白为什么 pyautogui 会为所有像素返回 (30, 30, 30),但我找到了 pyautogui 获取像素颜色的替代方法。

叫win32guipip install win32

def get_pixel_colour(i_x, i_y):
    import win32gui
    i_desktop_window_id = win32gui.GetDesktopWindow()
    i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
    long_colour = win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)
    i_colour = int(long_colour)
    win32gui.ReleaseDC(i_desktop_window_id,i_desktop_window_dc)
    return (i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)

来源:https://rosettacode.org/wiki/Color_of_a_screen_pixel#Python

它返回准确的结果。示例:(0, 127, 237)。

【讨论】:

    猜你喜欢
    • 2021-07-05
    • 2014-11-26
    • 2019-03-21
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多