копирование содержимого экрана - PullRequest
0 голосов
/ 27 февраля 2011

Мне нужно, чтобы в моем приложении была нарисована определенная область экрана ... хотя мой код работает нормально, он очень и очень медленный ... занимает более 20 секунд с худшим качеством и около 30-40 с наилучшим качеством.... есть ли более быстрый способ сделать то же самое ... я хочу, чтобы это было сделано в течение 0,5 секунд максимум ...

, сделав снимок экрана ба ... я могу сделать это за 5 секунд ....но мне это нужно в течение 0,5 секунд ...

xlib не является необходимостью для меня ... было бы здорово, если бы вы могли предложить что-то лучше и быстрее!

class Window:
def __init__(self, display, msg):
    self.display = display
    self.msg = msg

    self.screen = self.display.screen()
    self.window = self.screen.root.create_window(
        10, 10, 300, 300, 1,
        self.screen.root_depth,
        background_pixel=self.screen.white_pixel,
        event_mask=X.ExposureMask | X.KeyPressMask,
        )
    self.colormap = self.screen.default_colormap
    color = self.colormap.alloc_color(0, 0, 65535)
    xor_color = color.pixel ^ 0xffffff
    self.gc = self.window.create_gc(
        line_width = 2,
        line_style = X.LineSolid,
        fill_style = X.FillOpaqueStippled,
        fill_rule  = X.WindingRule,
        cap_style  = X.CapButt,
        join_style = X.JoinMiter,
        foreground = xor_color,
        background = self.screen.black_pixel,
        function = X.GXxor, 
        graphics_exposures = False,
        subwindow_mode = X.IncludeInferiors,
        )  

    self.window.map()

def loop(self):
    while True:
        e = self.display.next_event()

        if e.type == X.Expose:
            i=10
            j=10
            h=10
            k=10
            skip=0
            while j<121:
                while i<121:
                    if skip==0:
                        o_x_image=self.screen.root.get_image(i, j, 1, 1, Xlib.X.ZPixmap, 0xffffffff)
                        o_pil_image_rgb = PIL.Image.fromstring("RGB", (1, 1), o_x_image.data, "raw", "BGRX")
                        b = PIL.ImageStat.Stat(o_pil_image_rgb).mean
                        b=map(int, b)
                        r=b[0]*255
                        g=b[1]*255  
                        b=b[2]*255
                        color = self.colormap.alloc_color(r,g,b)
                        xor_color = color.pixel ^ 0xffffff
                        self.gc = self.window.create_gc(
                            foreground = xor_color,
                            function = X.GXxor
                            ) 
                        skip=1
                        #print "not skipping"
                    elif skip==1:
                        skip=0
                        #print "skipped"
                    self.window.point(self.gc,h,k)
                    h+=1
                    i+=1

                j+=1
                i=10
                k+=1
                h=10

        elif e.type == X.KeyPress:
            raise SystemExit
...