Самый быстрый способ получить цвет пикселей в Python или C ++? - PullRequest
0 голосов
/ 29 января 2011

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

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

self.attributes("-alpha", 0.85)

InЧтобы добавить желаемый эффект, мне нужно получить значения 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.

1 Ответ

2 голосов
/ 08 марта 2011

Возможно, вы захотите взглянуть на библиотеку изображений 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 ++

...