如何在GTK中为Drawable绘制半透明primitives such as filled polygons?
它的2010年,我谷歌没有找到如何为我的颜色添加alpha值。我错过了什么?
答案 0 :(得分:4)
使用gtk.gdk.Drawable.cairo_create()
并对返回的gtk.gdk.CairoContext
进行操作。见documentation。 Cairo是一个通用的矢量2D库,自GTK +版本开始使用以来很多版本; GDK绘图原语被弃用(尽管不是整个GDK)。
答案 1 :(得分:2)
这是实际的源代码。我只是想把整个pixbuf变灰,但要做一个形状,你只需要使用适当的路径方法:
def getBlendedPixbuf(pixbuf, (r,g,b,a)):
"""Turn a pixbuf into a blended version of the pixbuf by drawing a
transparent alpha blend on it."""
pixbuf = pixbuf.copy()
#convert pixbuf to Drawable:
visual = gtk.gdk.visual_get_best()
screen = visual.get_screen()
cmap = screen.get_default_colormap()
w,h = pixbuf.get_width(), pixbuf.get_height()
drawable = gtk.gdk.Pixmap(
None, w, h, visual.depth)
gc = drawable.new_gc()
drawable.draw_pixbuf(
gc, pixbuf, 0,0,0,0,-1,-1)
#do all the drawing on it
cc = drawable.cairo_create()
cc.set_source_rgba(r,g,b,a)
cc.paint()
#put it back into a pixbhf
pixbuf.get_from_drawable(
drawable,cmap,0,0,0,0,w,h)
return pixbuf