سؤال

أنا أستخدم Pygtk مع PIL. لقد اكتشفت بالفعل طريقة لتحويل PIL Imageق gtk.gdk.Pixbufس. ما أفعله لعرض pixbuf هو أنشئ gtk.gdk.Image, ثم استخدم img.set_from_pixbuf. أريد الآن رسم بضعة أسطر على هذه الصورة. يبدو أنني بحاجة Drawable للقيام بذلك. لقد بدأت في البحث من خلال المستندات ولكن لدي بالفعل 8-10 Windows مفتوحًا ولم يكن واضحًا على الإطلاق.

لذا - ما هو السحر الذي أحتاجه إلى الكتابة للحصول على رسم تمثل صورتي ، وارسم بعض الأشياء إليها ، ثم تحويلها إلى أ gdk.Image لذلك يمكنني عرضه على تطبيقي؟

هل كانت مفيدة؟

المحلول

كنت أفعل شيئًا مشابهًا (رسم إلى gdk.drawable) ، ووجدت أن set_foreground لا يعمل. للرسم فعليًا باستخدام اللون الذي أردته ، استخدمت ما يلي:

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

نصائح أخرى

يا إلهي. مؤلم جدا. ها هو:

    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)

إنه في الواقع يرسم أجهزة الصراف الآلي على خط أسود ، وليس حمراء ، لذلك لدي بعض الأعمال المتبقية للقيام بها ...

هل جربت سياق القاهرة؟ آسف يبدو أنني لا أستطيع التعليق على رسالتك. ومن ثم قمت بنشرها هنا.

لم أجرب هذا بنفسي ولكني أعتقد أن القاهرة هي صديقك عندما يتعلق الأمر بالرسم في GTK. يمكنك تعيين مصدر سياق القاهرة الخاص بك كـ pixbuf ، لذلك أعتقد أن هذا قابل للاستخدام بالنسبة لك.

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)

يجب أن تفعل الخدعة.

يجب عليك الاتصال بـ expose-event (GTK 2) أو draw (GTK 3) إشارة. في هذا المعالج ، ببساطة استخدم image.window للحصول على عنصر واجهة المستخدم gtk.gdk.Window; ؛ هذه فئة فرعية من gtk.gdk.Drawable, ، حتى تتمكن من الرسم عليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top