Форум сайта python.su
0
Питон 3,4
Здравствуйте. Такая проблема. Хочу прочитать значение всех пикселей экрана (принтом в терминал или в тхт файл, не важно). Приоритет именно на скорость. Код выполняется но постепенно замедляясь . .. и где-то после 10 000 пикселей выдает ошибку «pywintypes.error: (0, ‘GetPixel’, ‘No error message is available’)». Я так понимаю перегружается оператива , или просто идет захламление в коде устаревшими данными, как отдавать оперативу обратно системе толком не понял. Пытался использовать dc.collect() , но толе я его не так юзаю, толе он тут не помогает. Подскажите пожалуйста , как исправить код чтобы можно было прочитать всех пиксели экрана без ошибок и замедлений.
import win32gui def pixel_color_at(x, y): hdc = win32gui.GetWindowDC(win32gui.GetDesktopWindow()) c = int(win32gui.GetPixel(hdc, x, y)) # (r, g, b) return (c & 0xff), ((c >> 8) & 0xff), ((c >> 16) & 0xff) #преобразование в RGB y=0 for i in range(1,760):# по x x=0 y=y+1 for i in range (1,1300): # по у x=x+1 pixel = pixel_color_at(x,y) print (pixel,x)
Офлайн
253
vladmenТот у кого приоритет скорость не будет делать принт на консоль, тем более в винде.
Приоритет именно на скорость.
import wx wx.App() # Need to create an App instance before doing anything screen = wx.ScreenDC() size = screen.GetSize() bmp = wx.EmptyBitmap(size[0], size[1]) mem = wx.MemoryDC(bmp) mem.Blit(0, 0, size[0], size[1], screen, 0, 0) del mem # Release bitmap bmp.SaveFile('screenshot.png', wx.BITMAP_TYPE_PNG)
from mss import mss with mss() as sct: sct.shot()
vladmenЕсли вы взялись работать с низкоуровневыми интерфейсами ОС то работать надо по их правилам. Питон тут не виноват и никакая сборка мусора не поможет. Скорее всего вы истощили ресурсы ОС по количеству контекстов. WindowDC надо освобождать после использования.
выдает ошибку
Офлайн
0
Большое спасибо за ответ
Попробую внедрить Ваше замечание 
Офлайн