代码之家  ›  专栏  ›  技术社区  ›  Will

gtk中的α混合

  •  2
  • Will  · 技术社区  · 14 年前

    primitives such as filled polygons 到一个可拉的GTK?

    2 回复  |  直到 14 年前
        1
  •  4
  •   doublep    14 年前

    使用 gtk.gdk.Drawable.cairo_create() 并对返回的 gtk.gdk.CairoContext . 看到了吗 documentation . Cairo是一个通用的向量2D库,从很多版本开始就在GTK+中使用;GDK绘图原语被弃用以支持它(尽管不是整个GDK)。

        2
  •  2
  •   Claudiu    13 年前

    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