开罗可以直接画到Gtk.Pixbuf上吗?

时间:2011-09-23 02:01:41

标签: c# gtk# cairo pixbuf

我在C#中有一个很好的工作系统,它使用渲染方法中的Cairo命令绘制。但是,有时我想绘制一个像素图,而不是在需要更新屏幕时动态绘制。例如,目前我有:

public override void render(Cairo.Context g) {
  g.Save();
  g.Translate(x, y);
  g.Rotate(_rotation);
  g.Scale(_scaleFactor, _scaleFactor);
  g.Scale(1.0, ((double)_yRadius)/((double)_xRadius));
  g.LineWidth = border;
  g.Arc(x1, y2, _xRadius, 0.0, 2.0 * Math.PI); 
  g.ClosePath();
}

但是如果我选择的话,我希望将开罗命令呈现给Gtk.Pixbuf。类似的东西:

 g = GetContextFromPixbuf(pixbuf);
 render(g);

这可能吗?如果我不必将上下文转换回pixbuf会很好,但是cairo绘图将直接转到pixbuf。任何提示都将不胜感激!

1 个答案:

答案 0 :(得分:1)

答案实际上非常简单:渲染对象时,将它们渲染到从保存曲面创建的上下文中。然后,在渲染窗口时,根据相同的已保存曲面插入上下文。

创建一个表面:

  surface = new Cairo.ImageSurface(Cairo.Format.Argb32, width, height);

将形状渲染到曲面:

using (Cairo.Context g = new Cairo.Context(surface)) {
  shape.render(g); // Cairo drawing commands
}

渲染窗口:

  g.Save();
  g.SetSourceSurface(surface, 0, 0);
  g.Paint();
  g.Restore();
      ... // other Cairo drawing commands

就是这样!