pygtk: 在gtk.gdk.Pixbuf上绘制线条
我正在使用pygtk和PIL库。我已经找到了将PIL的Image
转换为gtk.gdk.Pixbuf
的方法。为了显示这个pixbuf,我创建了一个gtk.gdk.Image
,然后用img.set_from_pixbuf
来设置它。现在我想在这个图像上画几条线。显然,我需要一个Drawable
来做到这一点。我开始查看文档,但现在已经打开了8到10个窗口,感觉一点也不简单。
所以,我需要输入什么样的“魔法”命令,才能得到一个代表我图片的Drawable,在上面画一些东西,然后再把它变成gdk.Image
,这样我就可以在我的应用程序中显示它?
5 个回答
1
你试过使用cairo上下文吗?抱歉,我好像不能在你的帖子下评论,所以我在这里发了。
我自己还没试过,但我觉得在gtk中绘图时,cairo会对你很有帮助。你可以把cairo上下文的来源设置为pixbuf,所以我觉得这对你来说是可行的。
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)
现在它其实画出的是一条黑线,而不是红线,所以我还有一些工作要做……
4
我在做类似的事情(在一个 gdk.Drawable 上绘图),发现 set_foreground 这个方法不管用。为了用我想要的颜色进行绘图,我用了下面的代码:
# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))