Уведомления

Группа в Telegram: @pythonsu

#1 Май 1, 2015 07:03:25

Keysidy
Зарегистрирован: 2015-04-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

Доброго времени суток Всем!

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

функция:

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.

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

Всем заранее спасибо!

Офлайн

#2 Май 1, 2015 07:18:34

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

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).
те не попали в область клипования.

Работать попиксельно очень медленно даже на С.



Офлайн

#3 Май 1, 2015 07:37:19

Keysidy
Зарегистрирован: 2015-04-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

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”

Отредактировано Keysidy (Май 1, 2015 07:37:39)

Офлайн

#4 Май 1, 2015 13:38:08

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

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

Офлайн

#5 Май 1, 2015 14:33:21

Keysidy
Зарегистрирован: 2015-04-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

Shaman
Что-то у вас в отображаемом поменялось.

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

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

проблема в ТОМ, ЧТО он делает это фиксированное кол-во раз. Потом то ли буфер переполняется, то ли еще что то… вот ЧТО ИМЕННО является причиной, я бы и хотел узнать у знатоков дела.

Офлайн

#6 Май 1, 2015 16:43:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

Извините, это я невнимательно прочитал.
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); 
Скорее всего вы исчерпали ресурсы операционной системы. Контекст освобождать надо.



Офлайн

#7 Май 1, 2015 17:28:39

Keysidy
Зарегистрирован: 2015-04-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

doza_and
Извините, это я невнимательно прочитал.https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd162493(v=vs.85).aspx

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

windll.user32.ReleaseDC(0)

?

Отредактировано Keysidy (Май 1, 2015 17:30:59)

Офлайн

#8 Май 7, 2015 03:06:57

Keysidy
Зарегистрирован: 2015-04-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

windll.gdi32.GetPixel(windll.user32.GetDC(0), x, y) возвращает "-1"

апъ сабж

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version