Самый быстрый способ получить цвет пикселей в Python или C ++?

Я пытаюсь добавить эффект размытия к создаваемому мной прозрачному виджету Tkinter.

Я сделал виджет частично прозрачным с помощью этой строки (фрагмент)

self.attributes("-alpha", 0.85)

Чтобы добавить желаемый эффект, мне нужно получить значения RGB для каждого отдельного пикселя в виджете. Поскольку виджет частично непрозрачен, я не могу использовать метод .cget, потому что он возвращает значение RGB для заполнения (цвет до того, как он стал частично прозрачным), а не фактическое значение RGB).

В настоящее время я использую эту функцию (фрагмент)

def get_pixel_colour(self, i_x, i_y):
    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)
    return (i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)

Однако для моих целей это слишком слишком медленно. Есть ли более быстрый способ получить цвет пикселей?

Изменить:

Если Python слишком медленный для этой цели, я также могу использовать C ++. Мне просто нужно получить значения RGB пикселей в разных координатах x, y.


person rectangletangle    schedule 29.01.2011    source источник
comment
Это действительно звучит как что-то, что будет слишком медленным, если сделать это на Python. Кажется, вы даже ввели там отвратительную зависимость от платформы. А когда дело доходит до графики в реальном времени, get_pixel_color функция в любом случае - плохая идея.   -  person Matti Virkkunen    schedule 29.01.2011
comment
См. Правка, также он должен работать только в Windows.   -  person rectangletangle    schedule 29.01.2011
comment
О, у вас уже есть другая зависимость от платформы, которую вы просто не можете обойти?   -  person Matti Virkkunen    schedule 29.01.2011
comment
Дело не в том, что я не могу это обойти; Просто я не могу обойтись без существенной модификации кода. Так что другой бит, зависящий от платформы, не вызывает беспокойства.   -  person rectangletangle    schedule 29.01.2011


Ответы (1)


Вы можете взглянуть на библиотеку изображений Python, которую вы могли бы назвать примерно так

import Image
im = Image.open("name_of_file.jpg")
list_of_pixels = list(im.getdata())
print list_of_pixels[0]

Это приведет к выводу самого первого пикселя в формате RGB, например (255,255,255). Это довольно быстро, но я считаю, что он никогда не побьет C ++.

person ankenyr    schedule 08.03.2011