Python Drawing Часть изображения при наведении мыши - PullRequest
2 голосов
/ 25 февраля 2010

Мой вопрос относится к Python GTK

У меня есть изображение - JPG, которое я рисую в области рисования. Я хочу показать часть изображения - скажем, 10х10 на 10 пикселей - только там, где в данный момент находится указатель мыши. Все квадраты размером 10 х 10 пикселей от мыши должны быть скрыты, т. Е. Черные.

Я новичок в PyGtk, пожалуйста, кто-нибудь может помочь?

Спасибо

1 Ответ

2 голосов
/ 06 мая 2010
#!/usr/bin/python                                      

import os
import sys
import gtk

MASK_COLOR = 0x000000

def composite(source, start_x=345, start_y=345):
  width = 50                                    
  height  = 50                                  
  alpha = 255                                   
  dest = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8 ,800,800)
  dest.fill(MASK_COLOR)                                           
  source.composite(dest,                                          
                   start_x,                                       
                   start_y,
                   width,
                   height,
                   0,
                   0,
                   1,
                   1,
                   gtk.gdk.INTERP_NEAREST,
                   alpha)

  return dest


def it_moved(widget, event, window, masked, original):
  r = window.get_display().get_window_at_pointer()
  masked.set_from_pixbuf(composite(original.get_pixbuf(), r[1], r[2]))
  return True


if __name__ == '__main__':
  window = gtk.Window()
  eb = gtk.EventBox()
  original = gtk.Image()
  original.set_from_file(sys.argv[1])

  masked = gtk.Image()
  masked.set_from_pixbuf(composite(original.get_pixbuf()))

  eb.add(masked)
  eb.set_property('events', gtk.gdk.POINTER_MOTION_MASK)
  eb.connect('motion_notify_event', it_moved, window, masked, original)
  window.add(eb)
  window.set_size_request(800,800)
  window.show_all()
  gtk.main()

Это должно сделать то, что вы описываете. Я решил показать область 50х50, так как ваша была немного мала, чтобы видеть под указателем. Я тоже этого не скрывал.

...