Cairo.ImageSurface to Gdk.Pixbuf?

时间:2014-02-21 08:16:51

标签: gtk cairo gtk2 gdk pixbuf

尝试从ImageSurface创建一个Pixbuf,但我得到的只是黑色像素。有什么想法吗?

Cairo.ImageSurface surface = mysurface;
int w = surface.Width;
int h = surface.Height;
Gdk.Pixmap pixmap = new Gdk.Pixmap(null, w, h, 24);
using (Cairo.Context cr = Gdk.CairoHelper.Create(pixmap)) {
     cr.Operator = Cairo.Operator.Source;
     cr.SetSource(surface);
     cr.Paint();
}
_pixbuf = Gdk.Pixbuf.FromDrawable(pixmap, Gdk.Colormap.System, 0, 0, 0, 0, w, h);

2 个答案:

答案 0 :(得分:4)

如果你正在使用Gdk 3,那么你很幸运,因为这应该有效:

my_pixbuf = Gdk.pixbuf_get_from_surface (surface, x, y, w, h);

答案 1 :(得分:1)

事实证明,上面的代码完全正确......我只是没有在表面上绘制任何东西。效果很好!