在gtk中进行alpha混合

时间:2010-06-15 18:54:27

标签: graphics gtk pygtk

如何在GTK中为Drawable绘制半透明primitives such as filled polygons

它的2010年,我谷歌没有找到如何为我的颜色添加alpha值。我错过了什么?

2 个答案:

答案 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