3

PILでpygtkを使用しています。ImagePILをsに変換する方法はすでに理解していgtk.gdk.Pixbufます。pixbufを表示するために行うことは、を作成してgtk.gdk.Imageからを使用することimg.set_from_pixbufです。この画像に数本の線を引きたいと思います。どうやら私はそれをする必要がありDrawableます。ドキュメントを調べ始めましたが、すでに8〜10個のウィンドウが開いていて、まったく簡単ではありません。

だから-私の絵を表すDrawableを取得し、それにいくつかのものを描き、それをgdk.Imageアプリに表示できるように変換するには、どのような魔法を入力する必要がありますか?

4

5 に答える 5

4

私は似たようなこと (gdk.Drawable への描画) を行っていましたが、set_foreground が機能しないことがわかりました。必要な色を使用して実際に描画するには、次を使用しました。

# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))
于 2009-07-31T16:25:41.297 に答える
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 が描かれているので、まだやるべきことが残っています...

于 2009-07-31T15:32:50.077 に答える
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)

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

于 2009-09-28T01:42:54.017 に答える
1

カイロコンテキストを試しましたか?申し訳ありませんが、あなたの投稿にコメントできないようです。したがって、ここに投稿しました。

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

gdkcairocontext

于 2009-07-31T15:20:58.957 に答える
1

expose-event(GTK 2) またはdraw(GTK 3) シグナルに接続する必要があります。そのハンドラーではimage.window、ウィジェットのgtk.gdk.Window;を取得するために使用するだけです。これは のサブクラスなgtk.gdk.Drawableので、描画できます。

于 2011-07-05T06:51:48.810 に答える