def get_color_in_window(win, x, y, size=3): """Attempts to get the color from a position within a GDK window. """ # [GTK3] GDK2 and GDK3 return different tuples: no bitdepth in GDK3 # We use GTK3 now but for some reason users still get different results, # see https://gna.org/bugs/?20791 geom_tuple = win.get_geometry() win_x, win_y, win_w, win_h = geom_tuple[0:4] x = int(max(0, x - size/2)) y = int(max(0, y - size/2)) w = int(min(size, win_w - x)) h = int(min(size, win_h - y)) if w <= 0 or h <= 0: return RGBColor(0, 0, 0) # The call below can take over 20ms, and it depends on the window size! # It must be causing a full-window pixmap copy somewhere. pixbuf = gdk.pixbuf_get_from_window(win, x, y, w, h) if pixbuf is None: errcol = RGBColor(1, 0, 0) logger.warning("Failed to get pixbuf from screen; returning " "error indicator color %r", errcol) return errcol return RGBColor.new_from_pixbuf_average(pixbuf)
def get_color_in_window(win, x, y, size=3): """Attempts to get the color from a position within a GDK window. """ # [GTK3] GDK2 and GDK3 return different tuples: no bitdepth in GDK3 # We use GTK3 now but for some reason users still get different results, # see https://gna.org/bugs/?20791 geom_tuple = win.get_geometry() win_x, win_y, win_w, win_h = geom_tuple[0:4] x = int(max(0, x - size / 2)) y = int(max(0, y - size / 2)) w = int(min(size, win_w - x)) h = int(min(size, win_h - y)) if w <= 0 or h <= 0: return RGBColor(0, 0, 0) # The call below can take over 20ms, and it depends on the window size! # It must be causing a full-window pixmap copy somewhere. pixbuf = gdk.pixbuf_get_from_window(win, x, y, w, h) if pixbuf is None: errcol = RGBColor(1, 0, 0) logger.warning( "Failed to get pixbuf from screen; returning " "error indicator color %r", errcol) return errcol return RGBColor.new_from_pixbuf_average(pixbuf)
def get_color_in_window(win, x, y, size=3): """Attempts to get the color from a position within a GDK window. """ # [GTK3] GDK2 and GDK3 return different tuples: no bitdepth in GDK3 geom_tuple = win.get_geometry() win_x, win_y, win_w, win_h = geom_tuple[0:4] x = int(max(0, x - size/2)) y = int(max(0, y - size/2)) w = int(min(size, win_w - x)) h = int(min(size, win_h - y)) if w <= 0 or h <= 0: return RGBColor(0, 0, 0) if gui.pygtkcompat.USE_GTK3: pixbuf = gdk.pixbuf_get_from_window(win, x, y, w, h) else: screen = win.get_screen() colormap = screen.get_system_colormap() pixbuf = gdk.Pixbuf(gdk.COLORSPACE_RGB, False, 8, w, h) pixbuf = pixbuf.get_from_drawable(win, colormap, x, y, 0, 0, w, h) if pixbuf is None: errcol = RGBColor(1, 0, 0) print "warning: failed to get pixbuf from screen; returning", errcol return errcol return RGBColor.new_from_pixbuf_average(pixbuf)
def get_screenData(): while 1: # get screenshot data if major_version == 2: pb = Gdk.Pixbuf(Gdk.COLORSPACE_RGB, False, 8, sz[0], sz[1]) pb = pb.get_from_drawable(w, w.get_colormap(), 0, 0, 0, 0, sz[0], sz[1]) elif major_version == 3: pb = Gdk.pixbuf_get_from_window(w, 0, 0, sz[0], sz[1]) # save screenshot if pb != None: if major_version == 2: pb.save("./scr.png", "png") elif major_version == 3: pb.savev("./scr.png", "png", [], []) # delay 1 sec time.sleep(0.9)
def get_color_in_window(win, x, y, size=3): """Attempts to get the color from a position within a GDK window. """ win_x, win_y, win_w, win_h = win.get_geometry() x = int(max(0, x - size / 2)) y = int(max(0, y - size / 2)) w = int(min(size, win_w - x)) h = int(min(size, win_h - y)) if w <= 0 or h <= 0: return RGBColor(0, 0, 0) # The call below can take over 20ms, and it depends on the window size! # It must be causing a full-window pixmap copy somewhere. pixbuf = gdk.pixbuf_get_from_window(win, x, y, w, h) if pixbuf is None: errcol = RGBColor(1, 0, 0) print "warning: failed to get pixbuf from screen; returning", errcol return errcol return RGBColor.new_from_pixbuf_average(pixbuf)