Question

J'utilise pygtk avec PIL. J'ai déjà trouvé un moyen de convertir les images de PIL en gtk.gdk.Pixbuf . Pour afficher le pixbuf, je crée un gtk.gdk.Image , puis j'utilise le code img.set_from_pixbuf . Je veux maintenant tracer quelques lignes sur cette image. Apparemment, j'ai besoin d'un Drawable pour le faire. J'ai commencé à regarder à travers la documentation, mais j'ai déjà 8-10 fenêtres ouvertes et ce n'est pas simple du tout.

Alors, quelle magie dois-je taper pour obtenir un dessin représentant ma photo, y dessiner des éléments, puis le transformer en gdk.Image afin que je puisse l'afficher sur mon app?

Était-ce utile?

La solution

Je faisais quelque chose de similaire (dessiner sur un gdk.Drawable), et j'ai trouvé que set_foreground ne fonctionnait pas. Pour dessiner en utilisant la couleur que je voulais, j'ai utilisé ce qui suit:

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

Autres conseils

Oh mon dieu. Si douloureux. La voici:

    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)

Il dessine en fait un guichet automatique avec une ligne noire, pas un rouge, donc il me reste du travail à faire ...

Avez-vous essayé le contexte cairo? désolé je semble ne peux pas commenter votre post. donc je l'ai posté ici.

Je n’ai pas essayé cela moi-même, mais je crois que le Caire est votre ami quand il s’agit de dessiner avec gtk. vous pouvez définir la source de votre contexte de cairo sous la forme pixbuf, je pense donc que cela est utilisable pour vous.

gdkcairocontext

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)

Devrait faire l'affaire.

Vous devez vous connecter au signal expose-event (GTK 2) ou draw (GTK 3). Dans ce gestionnaire, utilisez simplement image.window pour obtenir le gtk.gdk.Window du widget; il s’agit d’une sous-classe de gtk.gdk.Drawable , afin que vous puissiez en tirer dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top