Найти - Пользователи
Полная версия: windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"
Начало » Python для новичков » windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"
1
Keysidy
Доброго времени суток Всем!

столкнулся со следующей проблемой:

функция:
def getpixel(x,y):
 return windll.gdi32.GeatPixel(windll.user32.GetDC(0), x, y)

в какой то момент времени начинает возвращать значение “-1”

т.е. мой цикл в файле first.py:

from ctypes import windll
x=150
y=200
def getpixel(x,y):
 return windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y)
while 1:
 try:
  print getpixel(x,y)
 except KeyboardInterrupt:
  break

работает определенное количество циклов, а потом “выдает” только “-1”

в моем случае кол-во этих циклов: 4999.

Кто нибудь может подсказать, с чем связана данная проблема? и уж совсем было бы хорошо, если бы сказали, как ее решить…

Всем заранее спасибо!
doza_and
https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd144909(v=vs.85).aspx
Return value

The return value is the COLORREF value that specifies the RGB of the pixel. If the pixel is outside of the current clipping region, the return value is CLR_INVALID (0xFFFFFFFF defined in Wingdi.h).
те не попали в область клипования.

Работать попиксельно очень медленно даже на С.
Keysidy
doza_and
https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd144909(v=vs.85).aspxReturn valueThe return value is the COLORREF value that specifies the RGB of the pixel. If the pixel is outside of the current clipping region, the return value is CLR_INVALID (0xFFFFFFFF defined in Wingdi.h).те не попали в область клипования.Работать попиксельно очень медленно даже на С.

видимо я не понял Вас, или изложил свой вопрос не понятно…

функция выдает мне нужное значение, но 4999 раз, а потом выдает только “-1”
Shaman
Keysidy
функция выдает мне нужное значение, но 4999 раз, а потом выдает только “-1”
Что-то у вас в отображаемом поменялось.
Keysidy
Shaman
Что-то у вас в отображаемом поменялось.

с чего такие выводы? я бы написал тогда, что “при изменении цвета пикселя значение функции становиться ”-1“ ”

1)в “месте пробы”(конкретный рассматриваемый пиксель) не менялся цвет.
2)даже когда я умышленно меняю цвет в “месте пробы” - функция работает и показывает что цвет сменился. (в противном случае какой смысл бы был в этой функции?)

проблема в ТОМ, ЧТО он делает это фиксированное кол-во раз. Потом то ли буфер переполняется, то ли еще что то… вот ЧТО ИМЕННО является причиной, я бы и хотел узнать у знатоков дела.
doza_and
Извините, это я невнимательно прочитал.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd162493(v=vs.85).aspx
    hdc = GetDC(hwnd); 
        MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
        LineTo(hdc, ptPrevious.x = LOWORD(lParam), 
          ptPrevious.y = HIWORD(lParam)); 
        ReleaseDC(hwnd, hdc); 
Скорее всего вы исчерпали ресурсы операционной системы. Контекст освобождать надо.
Keysidy
doza_and
Извините, это я невнимательно прочитал.https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd162493(v=vs.85).aspx

спасибо, я примерно так и предполагал. Но я так и не понял как мне ReleaseDC() в python'e осуществить…

windll.user32.ReleaseDC(0)

?
Keysidy
апъ сабж
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB