2009-07-31 16 views
3

私はpygtkをPILで使用しています。私はすでにPIL Imagegtk.gdk.Pixbufに変換する方法を考え出しました。私がpixbufを表示するために行うことは、gtk.gdk.Imageを作成してからimg.set_from_pixbufを使用することです。私はこのイメージに数行を描きたいと思っています。どうやらそれを行うにはDrawableが必要です。私はドキュメントを見て始めましたが、すでに8-10​​個のウィンドウが開いていて、まったく単純ではありません。pygtk:gtk.gdk.Pixbufに線を引く

私の絵を描くDrawableを取得するにはどのような魔法が必要ですか?それに何かを描き、それをgdk.Imageに変えてアプリに表示できますか?

答えて

4

私はGDKに描画似たような(やっていました。 Drawable)、set_foregroundが動作しないことがわかりました。実際に私が欲しかった色を使用して描画するには、私は次のように使用:

# Red! 
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0)) 
1

カイロの文脈を試しましたか?申し訳ありませんが、私はあなたの記事にはコメントができないようです。それで私はここにそれを掲示した。

私はこれを自分で試したことはありませんが、gtkでの描画にはカイロはあなたの友人だと私は信じています。あなたはpixbufとしてあなたのカイロのコンテキストのソースを設定することができますので、これはあなたのために使用可能だと思います。

gdkcairocontext

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) 

それは実際に、黒い線ATMを描くない赤1、私はいくつかの作業を行うには残っている...

1
image = gtk.Image() 
pixmap,mask = pixbuf.render_pixmap_and_mask() # Function call 
cm = pixmap.get_colormap() 
red = cm.alloc_color('red') 
gc = pixmap.new_gc(foreground=red) 
pixmap.draw_line(gc,0,0,w,h) 
image.set_from_pixmap(pixmap,mask) 

トリックを行う必要があります。

1

expose-event(GTK 2)またはdraw(GTK 3)信号に接続する必要があります。そのハンドラでは、単にimage.windowを使ってウィジェットのgtk.gdk.Windowを取得してください。これはgtk.gdk.Drawableのサブクラスなので、上に描画することができます。

関連する問題