首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GdkPixbuf设置ClutterImage

使用GdkPixbuf设置ClutterImage
EN

Stack Overflow用户
提问于 2017-06-07 09:14:34
回答 0查看 235关注 0票数 0

我正在尝试做我认为微不足道的事情,但无论我用ClutterImage做什么尝试,我都会得到错误消息Unable to load image data。我使用的语言是Vala,所以Clutter的Vapi文件有可能是错误的。我的GdkPixbuf对我来说似乎没问题,我可以用它设置一个GtkImage,我可以将它保存到磁盘上而不会出错,但是如果我将图像文件读回GdkPixbuf -> ClutterImage中,我会从Clutter中得到相同的错误。我还尝试了COGL_PIXEL_FORMAT_*的每个值,它总是相同的,尽管图像数据是RGB24格式的,但我很肯定。

我的代码是:

代码语言:javascript
复制
private Clutter.Content image;

construct {
    ...
    image = new Clutter.Image ();
    ...
}

public void set_image (Gdk.Pixbuf pixbuf) {
    lock (image) {
        unowned uint8[] pixels = pixbuf.get_pixels_with_length ();
        assert (pixels.length == pixbuf.width * pixbuf.height * 3);
        try {
            image.set_data (pixels,
                            Cogl.PixelFormat.RGB_888;
                            pixbuf.width,
                            pixbuf.height,
                            pixbuf.rowstride);
        } catch (Error e) {
            critical (e.message);
        }
    }
}

我从https://valadoc.org/clutter-1.0/Clutter.Image.set_data.html上的文档中的C示例中改编而来。

如果相关,我可以包括Vala吐出的C代码,但对我来说它看起来是正确的。

我开始认为ClutterImage不起作用了,所以我用我用pixbuf.save (...)保存的图像文件试了试https://github.com/GNOME/clutter/blob/master/examples/image-content.c中的例子,它起作用了。所以现在我在想,我可能正在尝试将图像对象用作GtkClutterEmbed小部件中的ClutterActor。这里真的没什么好看的,代码是

代码语言:javascript
复制
var embed = new GtkClutter.Embed ();
viewport.add (embed);
var stage = embed.get_stage ();
image = new Clutter.Image ();
stage.content = image;

在我看来,这与运行的示例中的内容是一样的,因为stage是一个ClutterActorClutterImage被设置为actor内容。所以..。我现在有点迷茫。

简单的例子

代码语言:javascript
复制
public static int main (string[] args) {
    GtkClutter.init (ref args);

    var window = new Gtk.Window ();
    var scrolled = new Gtk.ScrolledWindow (null, null);
    var embed = new GtkClutter.Embed ();

    window.add (scrolled);
    scrolled.add_with_viewport (embed);

    var pixbuf = new Gdk.Pixbuf.from_file ("image.png");
    var image = new Clutter.Image ();
    image.set_data (pixbuf.get_pixels (),
                    Cogl.PixelFormat.RGB_888,
                    pixbuf.width,
                    pixbuf.height,
                    pixbuf.rowstride);
    var stage = embed.get_stage ();
    stage.content = image;

    window.destroy.connect (Gtk.main_quit);
    window.show_all ();
    Gtk.main ();

    return 0;
}

编译时使用

代码语言:javascript
复制
valac --pkg cogl-1.0 --pkg clutter-gtk-1.0 --pkg gtk+-3.0 clutter-image-content.vala
EN

回答

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

https://stackoverflow.com/questions/44401984

复制
相关文章

相似问题

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