首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gtk3在DrawingArea中加载PixbufAnimation?

Gtk3在DrawingArea中加载PixbufAnimation?
EN

Stack Overflow用户
提问于 2015-01-06 20:20:49
回答 1查看 467关注 0票数 1

为了我的gstreamer应用程序的目的,在我给出DrawingArea小部件的句柄之前,我谈到了简单的加载器来下沉element.The,基本的想法是在Gtk.DrawingArea中加载一个动画.gif,但是我在文档上运行了这个问题。我发现了PixbufAnimation,我在Gtk.Image小部件中使用了它,但是同样的逻辑对Gtk.DrawingArea不起作用,因为它没有add方法,我不知道该怎么做,作为我最后的手段,我来这里寻求帮助。

这是我对Gtk.Image所做的:

代码语言:javascript
复制
from gi.repository import Gdk,Gtk,GdkPixbuf



class animatedWin(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self,width_request=640,height_request=480)
        self.canvas=Gtk.Image()
        self.add(self.canvas)
        self.load_file()
        self.connect("delete-event",self.Gtk.main_quit)
    def load_file(self):
        self.loader=GdkPixbuf.PixbufAnimation.new_from_file("loader.gif")
        self.canvas.set_from_animation(self.loader)


app=animatedWin()
app.show_all()

Gtk.main()

有没有可能用DrawingArea实现同样的事情?

EN

回答 1

Stack Overflow用户

发布于 2015-10-09 23:30:07

gtk3中的大多数小部件一样,DrawingArea使用cairo在小部件上进行绘制。Cairo使用contextsurfaces上绘制。您可以通过以下方式将转换为表面

代码语言:javascript
复制
public Surface Gdk.cairo_surface_create_from_pixbuf (Pixbuf pixbuf, int scale, Window? for_window)

然后再回来

代码语言:javascript
复制
public Pixbuf? Gdk.pixbuf_get_from_surface (Surface surface, int src_x, int src_y, int width, int height)

(摘自valadoc.org)

我的绘图应用程序中的示例代码片段(我在编写时正在学习Vala,因此它可能不是最好的实现):

代码语言:javascript
复制
private void on_scale (Gtk.Button button) { // on button press
            var my_pixbuf = Gdk.pixbuf_get_from_surface (this.buf_surface, 0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
            var tmp_surface = Gdk.cairo_surface_create_from_pixbuf (my_pixbuf, 2, null);
            var ctx = this.ccc; //this.ccc is context of drawing surface
            ctx.set_source_surface (tmp_surface, 0, 0);
            ctx.paint();
            drawing_area.queue_draw(); // ask drawing_area to redraw, on redraw I have function/method that will paint drawing_area widget surface with drawing surface
        }

PS。有关开罗的更多信息,请参阅http://valadoc.org/#!api=cairo/Cairo。在我看来,cairo用于矢量图形,而pixbuf用于光栅。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27798578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档