pygtk: рисовать линии на gtk.gdk.Pixbuf - PullRequest
3 голосов
/ 31 июля 2009

Я использую pygtk с PIL. Я уже нашел способ конвертировать PIL Image s в gtk.gdk.Pixbuf s. Для отображения pixbuf я создаю gtk.gdk.Image, а затем использую img.set_from_pixbuf. Теперь я хочу нарисовать несколько линий на этом изображении. Видимо мне нужно Drawable, чтобы сделать это. Я начал просматривать документы, но у меня уже открыто 8-10 окон, и это не так просто.

Итак - какую магию мне нужно набрать, чтобы получить Drawable, представляющий мою картинку, нарисовать на нем некоторые вещи, а затем превратить его в gdk.Image, чтобы я мог отобразить его в своем приложении?

Ответы [ 5 ]

4 голосов
/ 31 июля 2009

Я делал нечто подобное (рисование в gdk.Drawable) и обнаружил, что set_foreground не работает. Чтобы рисовать, используя нужный мне цвет, я использовал следующее:

# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))
3 голосов
/ 31 июля 2009

Боже мой. Так больно. Вот оно:

    w,h = pixbuf.get_width(), pixbuf.get_height()
    drawable = gtk.gdk.Pixmap(None, w, h, 24)
    gc = drawable.new_gc()
    drawable.draw_pixbuf(gc, pixbuf, 0, 0, 0, 0, -1, -1)

    #---ACTUAL DRAWING CODE---
    gc.set_foreground(gtk.gdk.Color(65535, 0, 0))
    drawable.draw_line(gc, 0, 0, w, h)
    #-------------------------

    cmap = gtk.gdk.Colormap(gtk.gdk.visual_get_best(), False)
    pixbuf.get_from_drawable(drawable, cmap, 0, 0, 0, 0, w, h)

На самом деле он рисует черную линию банкомата, а не красную, так что у меня еще есть работа ...

1 голос
/ 05 июля 2011

Вы должны подключиться к сигналу expose-event (GTK 2) или draw (GTK 3). В этом обработчике просто используйте image.window, чтобы получить виджет gtk.gdk.Window; это подкласс gtk.gdk.Drawable, так что вы можете рисовать на нем.

1 голос
/ 28 сентября 2009
image = gtk.Image()
pixmap,mask = pixbuf.render_pixmap_and_mask() # Function call
cm = pixmap.get_colormap()
red = cm.alloc_color('red')
gc = pixmap.new_gc(foreground=red)
pixmap.draw_line(gc,0,0,w,h)
image.set_from_pixmap(pixmap,mask)

Должен сделать свое дело.

1 голос
/ 31 июля 2009

Вы пробовали контекст Каира? извините, я не могу прокомментировать ваш пост. следовательно я отправил это здесь.

Я сам не пробовал, но я считаю, что Каир - твой друг, когда дело доходит до рисования в gtk. Вы можете установить источник своего контекста в Каире как pixbuf, так что я думаю, что это полезно для вас.

gdkcairocontext

...