2010-06-15 6 views

답변

4

gtk.gdk.Drawable.cairo_create()을 사용하고 반품 된 gtk.gdk.CairoContext을 사용하십시오. documentation을 참조하십시오. Cairo는 GTK +에서 여러 버전 이전부터 사용 된 일반적인 벡터 2D 라이브러리입니다. GDK 그리기 프리미티브는 더 이상 사용되지 않습니다 (GDK 전체가 아님).

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