我試圖做我認爲會很平凡的事情,但不管我用ClutterImage
嘗試什麼,我都會收到錯誤消息Unable to load image data
。我使用的語言是Vala,因此Clutter的Vapi文件有可能是錯誤的。 GdkPixbuf
我看起來不錯,我可以用它設置一個GtkImage
,我可以將它保存到磁盤上而不會出錯,但是如果我將圖像文件讀回到GdkPixbuf
- >ClutterImage
,我會從Clutter中得到相同的錯誤。我也試過COGL_PIXEL_FORMAT_*
的每一個值,它總是一樣的,雖然圖像數據格式爲RGB24
,但我很積極。使用GdkPixbuf設置ClutterImage
我的代碼是:
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
不起作用,所以我嘗試了https://github.com/GNOME/clutter/blob/master/examples/image-content.c的示例,並使用我使用pixbuf.save (...)
保存的圖像文件進行了操作。所以現在我想這可能是我試圖在GtkClutterEmbed
小部件中使用圖像對象作爲ClutterActor
。這確實不多見那裏,代碼是
var embed = new GtkClutter.Embed();
viewport.add (embed);
var stage = embed.get_stage();
image = new Clutter.Image();
stage.content = image;
這對我來說看起來一樣什麼在這樣的作品,在該階段是ClutterActor
和ClutterImage
設置爲演員內容的例子。所以...我現在有點虧了。
簡單的例子
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;
}
使用
valac --pkg cogl-1.0 --pkg clutter-gtk-1.0 --pkg gtk+-3.0 clutter-image-content.vala
圖像是否有alpha通道?如果是這樣,它需要是RGBA_8888而不是RGB_888。如果不是這樣,請發佈一個簡短的,自包含的正確示例( )。 –
nemequ
不,沒有alpha通道。圖像數據來自相機,該相機提供拜耳RG8像素信息,並將其轉換爲RGB24圖像。根據您的建議發佈的示例正確加載了已轉換爲Pixbuf並保存到文件的圖像。 FWIW回購是github.com/geoffjay/sentech-viewer。 – geoffjay