2

我在 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();
}

但是,如果我选择,我想将 Cairo 命令渲染到 Gtk.Pixbuf。就像是:

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

那可能吗?如果我不必将上下文转回 pixbuf,那就太好了,但是 cairo 绘图将直接转到 pixbuf。对此的任何提示将不胜感激!

4

1 回答 1

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

就是这样!

于 2011-09-23T14:04:58.123 回答