3

我将 pygtk 与 PIL 一起使用。我已经想出了一种将 PIL Images 转换为gtk.gdk.Pixbufs 的方法。我要显示 pixbuf 的方法是创建一个gtk.gdk.Image,然后使用img.set_from_pixbuf. 我现在想在这张图片上画几条线。显然我需Drawable要这样做。我已经开始浏览文档,但我已经打开了 8-10 个窗口,而且一点也不简单。

那么 - 我需要输入什么魔法来获得一个代表我的图片的 Drawable,在上面画一些东西,然后把它变成一个gdk.Image,这样我就可以在我的应用程序上显示它了?

4

5 回答 5

4

我正在做类似的事情(绘制到 gdk.Drawable),我发现 set_foreground 不起作用。为了实际使用我想要的颜色进行绘制,我使用了以下内容:

# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))
于 2009-07-31T16:25:41.297 回答
3

我的天啊。如此痛苦。这里是:

    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)

它实际上画了一个黑线 ATM,而不是红色的,所以我还有一些工作要做......

于 2009-07-31T15:32:50.077 回答
1

你试过开罗语境吗?抱歉,我似乎无法评论您的帖子。因此我把它贴在这里。

我自己没有尝试过,但我相信在 gtk 中绘图时 cairo 是你的朋友。您可以将 cairo 上下文的来源设置为 pixbuf,所以我认为这对您有用。

gdkcairocontext

于 2009-07-31T15:20:58.957 回答
1
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)

应该做的伎俩。

于 2009-09-28T01:42:54.017 回答
1

您应该连接到expose-event(GTK 2) 或draw(GTK 3) 信号。在该处理程序中,只需使用image.window来获取小部件的gtk.gdk.Window; 这是 的子类gtk.gdk.Drawable,因此您可以在其上进行绘制。

于 2011-07-05T06:51:48.810 回答