#python #rgb #pixel #pyautogui
#python #rgb #пиксель #pyautogui
Вопрос:
Я использую python 3.9 с pyautogui == 0.9.52, и я пытаюсь получить значение rgb определенного пикселя на моем экране. Результаты примерно такие: если у меня есть координата красного пикселя, он возвращает значение rgb как (30,30,30)
.
Если я использую displayMousePosition()
, мне сначала нужно запустить, sys.platform = '_'
чтобы вообще получить значение rgb, и даже тогда это все равно неправильное значение rgb.
Если я использую pyautogui.pixel(x,y)
, он также возвращает неправильное значение rgb. Может быть, это связано с несовместимыми версиями? Кто-нибудь знает, как это исправить?
Комментарии:
1.
displayMousePosition
похоже, он возвращает позицию, а не значение пикселя. Где эта функция определена / задокументирована? Какие значения вы получаете для пикселей по сравнению с тем, что вы ожидаете.2.@Lburris12 Разве ты не ищешь
image = pyautogui.screenshot()
x, y = pyautogui.position()
rgb = image.getpixel((x, y))
?3. @RandomDavis если я использую displayMousePosition(), он выдает обновленный вывод всякий раз, когда я перемещаю мышь. Выходные данные состоят из координат x и y мыши и значения RGB пикселя, на котором находится мышь. Когда я использую его, скажем, я пытаюсь получить значение оранжевого круга, я навожу курсор мыши на оранжевый круг, но значение RGB возвращает что-то вроде (30, 30, 30).
4. @Guimoute Я тоже пробовал это, но это также возвращает неправильное значение RGB.
5. Одна вещь, которую мне может быть полезно знать, это то, что когда я открываю оболочку python и импортирую pyautogui, в нем говорится: «Предупреждение пользователя: rubicon.objc.ctypes_patch был протестирован только с Python с 3.4 по 3.8. Вы используете Python 3.9.0. Скорее всего, все будет работать правильно». Если это проблема, кто-нибудь знает, как я могу правильно использовать это на python 3.9?
Ответ №1:
Я столкнулся с аналогичной проблемой. Я не мог понять, почему pyautogui возвращает (30, 30, 30) для всех пикселей, но я нашел альтернативу pyautogui для получения цвета пикселей.
Он называется win32gui pip 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 amp; 0xff), ((i_colour >> 8) amp; 0xff), ((i_colour >> 16) amp; 0xff)
Источник: https://rosettacode.org/wiki/Color_of_a_screen_pixel#Python
Он возвращает точные результаты. Пример: (0, 127, 237).